Tagged: android

Android : A/libc: fdsan: attempted to close file descriptor 86, expected to be unowned

หลังจากกำหนด targetSdkVersion 30 ปรากฎว่าแอปปลิเคชันเปิดแล้วปิดตัวทันที ลองไปตรวจสอบใน Logcat พบว่ามีเพียงข้อความ error A/libc: fdsan: attempted to close file descriptor 86, expected to be unowned แต่พอเปลี่ยน targetSdkVersion 29 กลับสามารถทำงานได้ปกติ เลยสืบค้นจนพบว่า Error ที่เกิดขึ้น นั่นเกี่ยวกับการใช้ <pl.droidsonroids.gif.GifTextView android:layout_width=”match_parent” android:layout_height=”match_parent” android:background=”@drawable/image” /> พบว่าถ้ารูปภาพที่โหลดไม่ใช่...

Android : How to detect App foreground/background

วันนี้เรามีอีกวิธีในการตรวจสอบว่าแอปฯของเราอยู่ในสถานะทำงานอยู่ (foreground) หรือถูกปิดหรือย่อให้อยู่เบื้องหลัง (Background) โดยวิธีนี้เราจะเรียกใช้ Lifecycle Observer ที่มากับ androidx (androidx.lifecycle.OnLifecycleEvent) ตรวจจับการทำงานของ Event ของแอปฯ การเรียกใช้เราประกาศครั้งเดียวตอนเปิดแอปฯ แล้วตัว lifecycle จะคอยจับ event ให้เรา ดังนี้ public class MainApp extends AppCompatActivity implements LifecycleObserver { … @Override protected void onCreate(Bundle savedInstanceState)...

Android Issue : Violation of Interfering with Apps, Third-party Ads, or Device Functionality policy

เคยประสบปัญหาโดน Google Rejected App ด้วยเหตุผลว่า “Violation of Interfering with Apps, Third-party Ads, or Device Functionality policy” หรือ แบบง่ายๆคือ การแสดงโฆษณาขึ้นมาหลังจากที่ปิดแอปฯ หรือย่อแอปฯ หรือภายนอกแอปฯ นั่นเอง ซึ่งจากที่ทดสอบมา สมมติว่าขณะที่แอปกำลังโหลดโฆษณา (Interstitial Ads) อยู่แล้วเราทำการกดปุ่ม Home เพื่อย่อแอปฯไปเบื้องหลัง ซึ่งในความเป็นจริงแล้วแอปฯ ก็ยังทำงานอยู่ในเบื้องหลัง (Background) นั่นเอง เพราะฉะนั้นเมื่อโหลดโฆษณาเสร็จ...

Android : How to create custom dialog

โดยปกติ Android จะมี AlertDialog ให้เราเรียกใช้ได้เลย ต้องการกำหนดข้อความอะไรก็สามาถเรียกฟังก์ชัน .setMessage(…) ได้ กำหนดให้มีปุ่มกดได้ก็เรียกฟังก์ชัน .setPositiveButton(…) ก็มีปุ่มพร้อมกดให้เลย แต่ถ้าเราต้องการเพิ่มเติมรูปภาพ หรือออปชันอื่นๆ ก็อาจทำไม่ได้ หรือทำได้แต่ไม่โดนใจเรา ซึ่งเราก็มีอีกทางเลือกคือสร้าง Custom Dialog ขึ้นมาเอง กำหนดหน้าตาของ Dialog layout เองทั้งหมด แบบนี้ก็จะได้ตามที่เราต้องการเลย เช่น สมมติว่าต้องการเพิ่มรูปภาพให้กดในรูปได้ (ImageButton) หรือต้องการเพิ่มข้อความให้กดแล้วไปเว็บต่อได้ (TextView) ก็ทำได้เลย โดยมีขั้นตอนการสร้าง Custom Dialog ดังนี้Create...

Android : How to handling Orientation Changed

ปัจจุบันสมาร์ทโฟนสามารถใช้งานได้ทั้งแบบแนวตั้ง (Portrait) และแนวนอน (Landscape) ซึ่งสมาร์ทโฟนมีฟังก์ชันการหมุนหน้าจออัตโนมัติ เพราะฉะนั้นถ้าเราออกแบบแอปปลิเคชันแบบแนวตั้งอย่างเดียว เมื่อผู้ใช้งานหมุนหน้าจอเป็นแนวนอน Layout ของแอปฯก็จะเพี้ยนจนบางครั้งอาจใช้งานไม่ได้ เช่น ปุ่มถูกย่อจนเล็กเกินไป เป็นต้น วันนี้เราจะมาเรียนรู้วิธีการจัดการ การหมุนหน้าจอของผู้ใช้งานกัน โดย Android ได้เตรียม Call back funtion ให้เรียบร้อย โดยมีขั้นตอนดังนี้ แก้ไข AndroidManifest.xml สำหรับ Activity ที่เราต้องการ โดยเพิ่มบรรทัดนี้ <activity android:name=”.MyActivity”        ...

Android : How to set AppCompat Toolbar back button

วันนี้เราจะมาพูดถึงการสร้างปุ่ม Back บน Toolbar กัน ปกติมือถือแอนดรอยด์จะมีปุ่มย้อนกลับให้อยู่แล้ว แต่บางยี่ห้ออาจไม่ได้แยกปุ่มย้อนกลับมาให้ใช้ง่ายๆ เราก็ควรรองรับการย้อนกลับในแอปปลิเคชันด้วยก็ดี สำหรับแอนดรอยด์เวอร์ชันใหม่ๆ เราจะเปลี่ยนมาใช้ AppcompatActivity กันแล้ว เพราะฉะนั้นเราจะมาสร้าง Toolbar ด้วย androidx.appcompat.widget.Toolbar เริ่มต้นดังนี้ in Java Code protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar =...