29

デバイス: エミュレータ ピクセル 3a - Android 11

コード:

    final List<Intent> cameraIntents = new ArrayList<Intent>();
    final Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    final List<ResolveInfo> listCam = 
    context.getPackageManager().queryIntentActivities(captureIntent, 0);

使用時:

targetSdkVersion 30
compileSdkVersion 30

listCam サイズは 0 です

そして次のように変更する場合:

compileSdkVersion 29

listCam のサイズは 1 です。

次のコードを使用します。

    val captureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    baseActivity.startActivity(captureIntent)

正常に動作し、カメラ アプリが表示されます。

queryIntentActivities がカメラの意図を返さない理由は何ですか?

ありがとう!

4

4 に答える 4

25

packageManager.queryIntentActivities(intent, 0)アプリが実行されている場合、空のリスト返しますtargetSdkVersion 30

この問題を解決するには<queries>、マニフェストで使用する必要がありますqueryIntentActivities()。呼び出し元のアプリの宣言に基づいてフィルター処理されます。

画像のキャプチャと画像のアップロードを修正して、Android の「スコープ ストレージ」で動作するようにします

この問題は、新しいパッケージの可視性 ( https://developer.android.com/about/versions/11/privacy/package-visibility ) に関連している可能性があります。すべての更新 (少なくとも Android Studio 4.1) の後、アプリで必要なアクションを示すマニフェストを追加してみてください。

私の場合、 CAMERAにIMAGE_CAPTURE 、GALLERYにGET_CONTENT(ビデオが必要な場合はmimeTypeを変更するファイルを取得するため)、 GALLERYにPICK(ビデオが必要な場合はmimetypeを変更する必要があります) GALLERYにCHOOSER(誰かが他の画像を持っている場合)を追加すると、問題はなくなりますブラウザー)

追加する必要があるクエリをlogcatで確認することもできます(「BLOCKED」または「権限なし」が含まれている必要があります。エラーは、戻り値ImagePickerModuleのあるインテントで権限がない場合に発生します(コメントして、でより良いエラーを確認できます)resolveActivitynullstartActivityForResult

アドイン<query>_AndroidManifest.xml

<manifest>
.....
.....
<queries>
    <!-- Browser -->
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="http" />
    </intent>
    <!-- Camera -->
    <intent>
        <action android:name="android.media.action.IMAGE_CAPTURE" />
    </intent>
    <!-- Gallery -->
    <intent>
        <action android:name="android.intent.action.GET_CONTENT" />
        <data android:mimeType="image/*" />
    </intent>
    <intent>
        <action android:name="android.intent.action.PICK" />
        <data android:mimeType="image/*" />
    </intent>
    <intent>
        <action android:name="android.intent.action.CHOOSER" />
     </intent>
</queries>
.....
.....
</manifest>
于 2021-04-29T11:59:07.520 に答える