2020年11月5日木曜日

Android 11 では ACTION_CREATE_DOCUMENT と ACTION_OPEN_DOCUMENT には <queries> 指定が必要

Intent.ACTION_CREATE_DOCUMENT および Intent.ACTION_OPEN_DOCUMENT を startActivityForResult() で呼び出す以下のコードは、targetSdkVersion が 29 (Android 10)までは問題なく動きます。
  1.  private fun createDocument() {  
  2.     val intent = Intent(Intent.ACTION_CREATE_DOCUMENT)  
  3.         .addCategory(Intent.CATEGORY_OPENABLE)  
  4.         .setType("*/*")  
  5.         .putExtra(Intent.EXTRA_TITLE, "log.txt")  
  6.   
  7.     if (intent.resolveActivity(packageManager) != null) {  
  8.         startActivityForResult(intent, REQUEST_CODE_CREATE_DOCUMENT)  
  9.     } else {  
  10.         Toast.makeText(  
  11.             this,  
  12.             "Unable to resolve Intent.ACTION_CREATE_DOCUMENT",  
  13.             Toast.LENGTH_SHORT  
  14.         )  
  15.             .show()  
  16.     }  
  17. }  
  18.   
  19. private fun openDocument() {  
  20.     val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)  
  21.         .addCategory(Intent.CATEGORY_OPENABLE)  
  22.         .setType("*/*")  
  23.   
  24.     if (intent.resolveActivity(packageManager) != null) {  
  25.         startActivityForResult(intent, REQUEST_CODE_OPEN_DOCUMENT)  
  26.     } else {  
  27.         Toast.makeText(  
  28.             this,  
  29.             "Unable to resolve Intent.ACTION_OPEN_DOCUMENT",  
  30.             Toast.LENGTH_SHORT  
  31.         )  
  32.             .show()  
  33.     }  
  34. }  
しかし、targetSdkVersion を 30 (Android 11)にすると、intent.resolveActivity(packageManager) が null を返すようになってしまいます。

Android 11 では AndroidManifest.xml に以下の <queries> を指定すると動くようになります。
  1. <manifest ...>  
  2.   
  3.     ...  
  4.   
  5.     <queries>  
  6.         <intent>  
  7.             <action android:name="android.intent.action.CREATE_DOCUMENT" />  
  8.             <data android:mimeType="*/*" />  
  9.         </intent>  
  10.         <intent>  
  11.             <action android:name="android.intent.action.OPEN_DOCUMENT" />  
  12.             <data android:mimeType="*/*" />  
  13.         </intent>  
  14.     </queries>  
  15.   
  16.     ...  
  17. </manifest>  




0 件のコメント:

コメントを投稿