Education KCNBRAND.COM Blog

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” /> พบว่าถ้ารูปภาพที่โหลดไม่ใช่...

MAC: How to get values on latest row in NUMBERS on Mac

บน MACOS มีโปรแกรม NUMBERS ที่เราใช้แทนโปรแกรม EXCEL บน MS Windows โดยการใช้งานทั่วไปจะคล้ายคลึงกัน วันนี้เราจะมาพูดถึงฟังก์ชันที่มีประโยชน์ตัวหนึ่ง ที่เราใช้ในการอ้างถึงข้อมูลในช่องตาราง โดยหากเราต้องการเอาค่าล่าสุดของแต่ละคอลัมธ์ เราสามารถเรียกใช้ฟังก์ชัน INDEX โดยมีรูปแบบดังนี้ INDEX(<COLUMN NAME>,COUNTA(<COLUMN NAME>)) โดยผลลัพธ์คือ การแสดงข้อมูลในคอลัมธ์ที่ระบุ ด้วยการนับจำนวนคอลัมธ์ผ่านฟังก์ชัน COUNTA() แต่จำนวนคอลัมธ์ที่นับได้ไม่ได้รวม Heading Column เพราะฉะนั้นถ้าเรามี Heading Column อยู่ 1 บรรทัด เราต้อง +...

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) นั่นเอง เพราะฉะนั้นเมื่อโหลดโฆษณาเสร็จ...

mySQL : how to find and get string in 1 query

วันนี้เราจะมารู้จักฟังก์ชันใน mysql query เพื่อใช้ในการค้นหาข้อความ หรือ คำ ในฐานข้อมูล เพื่อนำไปใช้ตามวัตถุประสงค์ต่างๆ ซึ่งมีฟังก์ชันที่เกี่ยวข้องคือ instr() ฟังก์ชันที่ใช้ในการค้นหาตำแหน่งเร่ิมต้นของตัวอักษร ,คำ, หรือประโยคที่เราสนใจ ซึ่งมีรูปแบบการเรียกใช้ดังนี้ instr(Source String, Search String) Source String = ประโยคหรือข้อความตั้งต้นที่เราจะใช้ในการค้นหา Search String = คำหรือข้อความที่เราต้องการค้นหา 2. substr() ฟังก์ชันที่ใช้ในการตัดคำ หรือข้อความออกมาจาก String substr(Source String, index...

Android : How to get Screen Size include Multi-Window Screen Size

วันนี้เราจะมาหาขนาดของหน้าจอกัน ซึ่งจำเป็นมากหากแอปปลิเคชันของเราต้องรองรับการทำงานแบบ Multi-Window หรือ รองรับการทำงานแบบหมูนหน้าจอ (Rotate Orientation) ซึ่งเราต้องปรับแต่งโครงสร้างของแอปให้เหมาะกับการทำงานด้วย วิธีการที่หาขนาดหน้าจอมีหลายวิธีด้วยกัน แต่วิธีที่แนะนำในวันนี้ใช้งานได้ดี เท่าที่ทดสอบมา ดังนี้ DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); ScreenWidth = metrics.widthPixels; ScreenHeight = metrics.heightPixels; เพียงเท่านี้เราก็จะได้ขนาดหน้าจอทั้ง กว้าง และยาวครับ ซึ่งเมื่อเราทำการหมุนจอเป็นแบบ Landscape ขนาด กว้าง x ยาว ก็จะสลับที่กัน...