Intent.ACTION_CREATE_DOCUMENT および Intent.ACTION_OPEN_DOCUMENT を startActivityForResult() で呼び出す以下のコードは、targetSdkVersion が 29 (Android 10)までは問題なく動きます。
- 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()
- }
- }
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>
<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 件のコメント:
コメントを投稿