LoginSignup
0
0

More than 3 years have passed since last update.

getPackageManagerでインストールアプリ一覧が表示されない(Android11・APIレベル30)

Last updated at Posted at 2021-01-10

これまでgetPackageManager()#getInstalledPackages()を用いれば簡単に端末内のインストールアプリ情報を取得することができました。
しかし、Android 11(APIレベル30)からは単に下記のようなコードを記載するだけではシステムアプリ情報しか取得できなくなりました。

例)デバイス内のインストールアプリをLog出力する

MainActivity.java
PackageManager pm = getApplicationContext().getPackageManager();
        List<PackageInfo> appInfoList = pm.getInstalledPackages(0);
        for(int i =0;i<appInfoList.size();i++){
            Log.d("MainActivity",appInfoList.get(i).applicationInfo.loadLabel(pm).toString());
        }

何がダメだったか

Android 11(APIレベル30)からはセキュリティ的に厳しくなっており、外部パッケージへのアクセスについてはManifestに明示する必要があります。

解決策

AndroidManifest.xmlにパーミッションの記述を書いてしまう。

AndroidManifest.xml
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>

…全部許可してしまうので非推奨なやり方だと思われます。
本来は<queries>で囲って個別に明示するのが正しい方法なのかも。

参考

Android 11 でのパッケージへのアクセス - Android Developers

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0