1

を使用しPackageManagerて、ユーザーのデバイスにインストールされているすべてのパッケージのリストを取得しています。targetSdkVersion 29 から 30 に切り替えるまで、これは完全に正常に機能しています。

targetSdkVersion を 29 から 30 に増やすと、PackageManagerパッケージの正しいリストが返されなくなりました (ランチャーを作成していますが、実際には、起動できるパッケージはほとんど返されません)。

ここpm.getInstalledPackages(0)に示されているように、pm.getInstalledApplications(0)アプリを取得する方法を試しました。それらのどれも機能せず、以前はすべて機能していました。

build.gradle のバージョン設定:

compileSdkVersion 30
defaultConfig {
    minSdkVersion 23
    targetSdkVersion 29
}

ここで何が起こっているか知っている人はいますか?

4

2 に答える 2

2

Android 11 (API 30) を対象とする場合、他のパッケージを表示するには、マニフェストに宣言を追加する必要があります: https://developer.android.com/about/versions/11/privacy/package-visibility

特に、ランチャーを構築している場合は、

<manifest>
  <queries>
    <intent>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />
    </intent>
  </queries>
  ...
</manifest>

すべての結果を許可します

Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
context.getPackageManager().queryIntentActivities(intent, 0);

一致する可能性があります。

于 2020-10-21T19:00:29.057 に答える