【发布时间】:2020-06-24 05:04:23
【问题描述】:
我试图在 android 中存储文件,但我做不到。 首先,我使用这样的标签在 Androidmenifest.xml 中添加了两个权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
并且,添加了检查 MainActivity.kt 中两个权限的逻辑
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn = findViewById(R.id.button)
btn.setOnClickListener(object : View.OnClickListener{
override fun onClick(v: View?) {
checkPermission()
}
})
}
private fun checkPermission() {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED
|| checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(this, "Read/Write external storage", Toast.LENGTH_SHORT).show()
}
requestPermissions(arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE),
101)
} else {
writeFile()
}
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
when (requestCode) {
101 -> if (grantResults[0] == PackageManager.PERMISSION_GRANTED
&& grantResults[1] == PackageManager.PERMISSION_GRANTED) {
writeFile()
} else {
Log.d("MainActivty", "Permission always deny")
}
}
}
private fun writeFile() {
val file = File(Environment.getExternalStorageDirectory().getPath() + File.separator.toString() + "temp.txt")
try {
Log.d("MainActivty", "create new File : " + file.createNewFile())
} catch (e: IOException) {
e.printStackTrace()
}
}
最后,我通过嵌入式 Amulator 启动了它。但是,有权限被拒绝。
错误日志在这里:
2020-03-12 15:46:22.317 4148-4148/com.techtown.permissiontest W/System.err: java.io.IOException: Permission denied
2020-03-12 15:46:22.318 4148-4148/com.techtown.permissiontest W/System.err: at java.io.UnixFileSystem.createFileExclusively0(Native Method)
2020-03-12 15:46:22.318 4148-4148/com.techtown.permissiontest W/System.err: at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
2020-03-12 15:46:22.318 4148-4148/com.techtown.permissiontest W/System.err: at java.io.File.createNewFile(File.java:1008)
2020-03-12 15:46:22.318 4148-4148/com.techtown.permissiontest W/System.err: at com.techtown.permissiontest.MainActivity.writeFile(MainActivity.kt:77)
2020-03-12 15:46:22.319 4148-4148/com.techtown.permissiontest W/System.err: at com.techtown.permissiontest.MainActivity.onRequestPermissionsResult
我该如何解决?
【问题讨论】:
-
Android Q?......
-
@blackapps 是的。对。
-
该目录在 Android Q 下不再可用。在过去的几个月里,这里每天报告两次或三次。
-
@MikeM。哦,我解决了。非常感谢。
标签: android kotlin android-external-storage