Skip to content

Instantly share code, notes, and snippets.

View champChayangkoon's full-sized avatar

Chayangkoon Tirawanon champChayangkoon

View GitHub Profile
@champChayangkoon
champChayangkoon / AndroidManifest.xml
Created September 19, 2020 15:31
External storage for scoped storage
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.chayangkoon.champ.scopedstorage">
<!--สำหรับการอ่านไฟล์ต่างๆใน External Storage บนอุปกรณ์-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--สำหรับการเขียนไฟล์ต่างๆใน External Storage บนอุปกรณ์-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28"/>
...
</manifest>
val externalStorageVolumes: Array<out File> = ContextCompat.getExternalFilesDirs(applicationContext, null)
val primaryExternalStorage = externalStorageVolumes[0]
// ตรวจสอบ External storage ว่าพร้อมใช้งานทั้งอ่านและเขียนไฟล์หรืิอไม่
fun isExternalStorageWritable(): Boolean {
return Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED
}
// ตรวจสอบ External storage ว่าพร้อมใช้งานสำหรับการอ่านไฟล์หรือไม่
fun isExternalStorageReadable(): Boolean {
return Environment.getExternalStorageState() in
setOf(Environment.MEDIA_MOUNTED, Environment.MEDIA_MOUNTED_READ_ONLY)
}
// ถ้าไม่ใช้ SAM Conversions จะเขียน Code ประมาณนี้
adapter.setOnItemClickListener(object : OnItemClickListener {
override fun onItemClick(position: Int) {
// handle onItemClick
}
})
// แต่ถ้าใช้ SAM Conversions จะเขียนในรูปแบบของ Lambda Expression
adapter.setOnItemClickListener {
// handle onItemClick
fun interface OnItemClickListener {
fun onItemClick(position: Int)
}
fun setOnItemClickListener(onItemClickListener: OnItemClickListener){
...
}
// ถ้าไม่ใช้ SAM Conversions จะเขียน Code ประมาณนี้
view.setOnClickListener(object : View.OnClickListener {
override fun onClick(view: View?) {
// handle onClick
}
})
// แต่ถ้าใช้ SAM Conversions จะเขียนในรูปแบบของ Lambda Expression
view.setOnClickListener {
// handle onClick
public interface OnClickListener {
void onClick(View view);
}
public void setOnClickListener(@Nullable View.OnClickListener l) {
...
}
fun getAppSpecificAlbumStorageDir(context: Context, albumName: String): File? {
val file = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), albumName)
if (!file.mkdirs()) {
Log.e(LOG_TAG, "Directory not created")
}
return file
}
@champChayangkoon
champChayangkoon / AndroidManifest.xml
Created August 8, 2020 10:31
set support legacy external storage for target sdk 29
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.chayangkoon.champ.scopedstorage">
<application
...
android:requestLegacyExternalStorage="true">
...
</application>
</manifest>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.chayangkoon.champ.scopedstorage">
<!--สำหรับการอ่านไฟล์ต่างๆใน External Storage บนอุปกรณ์-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--สำหรับการเขียนไฟล์ต่างๆใน External Storage บนอุปกรณ์-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
</manifest>