private fun createDocument() {
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT)
.addCategory(Intent.CATEGORY_OPENABLE)
.setType("*/*")
.putExtra(Intent.EXTRA_TITLE, "log.txt")
if (intent.resolveActivity(packageManager) != null) {
startActivityForResult(intent, REQUEST_CODE_CREATE_DOCUMENT)
} else {
Toast.makeText(
this,
"Unable to resolve Intent.ACTION_CREATE_DOCUMENT",
Toast.LENGTH_SHORT
)
.show()
}
}
private fun openDocument() {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
.addCategory(Intent.CATEGORY_OPENABLE)
.setType("*/*")
if (intent.resolveActivity(packageManager) != null) {
startActivityForResult(intent, REQUEST_CODE_OPEN_DOCUMENT)
} else {
Toast.makeText(
this,
"Unable to resolve Intent.ACTION_OPEN_DOCUMENT",
Toast.LENGTH_SHORT
)
.show()
}
}
しかし、targetSdkVersion を 30 (Android 11)にすると、intent.resolveActivity(packageManager) が null を返すようになってしまいます。
Android 11 では AndroidManifest.xml に以下の <queries> を指定すると動くようになります。
<manifest ...>
...
<queries>
<intent>
<action android:name="android.intent.action.CREATE_DOCUMENT" />
<data android:mimeType="*/*" />
</intent>
<intent>
<action android:name="android.intent.action.OPEN_DOCUMENT" />
<data android:mimeType="*/*" />
</intent>
</queries>
...
</manifest>
0 件のコメント:
コメントを投稿