有効なAndroid権限のリストを取得しようとしています。「公式」権限は http://developer.Android.com/reference/Android/Manifest。 permission.html ですが、まだまだあるようです。
例えば
Android.permission.READ_SETTINGS
Android.permission.ACCESS_LOCATION
Android.permission.ACCESS_GPS
com.Android.vending.CHECK_LICENSE
com.Android.browser.permission.READ_HISTORY_BOOKMARKS
com.Android.browser.permission.WRITE_HISTORY_BOOKMARKS
com.google.Android.googleapps.permission.GOOGLE_AUTH
com.google.Android.googleapps.permission.GOOGLE_AUTH.OTHER_SERVICES
com.google.Android.c2dm.permission.RECEIVE
そのようなリストはどこで入手できますか?これらの権限の説明はどこで入手できますか?
すべてのアクセス許可の包括的な「リスト」などはありません。新しい権限は、独自の権限を適用したいアプリケーションで定義できます: https://developer.Android.com/guide/topics/security/security.html#declaring 。
Manifest.permission
クラスには「システム」権限がリストされており、すでにご存じでしょう。リストにある他の項目は、システム権限ではなく、特定のアプリに固有のものであるか、古い名前です(ACCESS_LOCATIONやACCESS_GPSは1.0より前の名前など)。
ソース内の<permission Android:name=
などのgrepは、含まれているすべてのアプリの権限(オープンソースアプリの場合)を明らかにしますが、一般的には、ドキュメント化された権限名に固執する必要があります。
adb Shell pm list permissions -s
これはあなたが探しているものかもしれません。
次のスニペットを使用して、デバイスで宣言されているすべての権限を取得します。
Context context = this;
PackageManager pm = context.getPackageManager();
CharSequence csPermissionGroupLabel;
CharSequence csPermissionLabel;
List<PermissionGroupInfo> lstGroups = pm.getAllPermissionGroups(0);
for (PermissionGroupInfo pgi : lstGroups) {
csPermissionGroupLabel = pgi.loadLabel(pm);
Log.e("perm", pgi.name + ": " + csPermissionGroupLabel.toString());
try {
List<PermissionInfo> lstPermissions = pm.queryPermissionsByGroup(pgi.name, 0);
for (PermissionInfo pi : lstPermissions) {
csPermissionLabel = pi.loadLabel(pm);
Log.e("perm", " " + pi.name + ": " + csPermissionLabel.toString());
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
スマートフォンのすべての権限を一覧表示するには
adb Shell pm list permissions -g
-s引数は短い要約です
そのようなリストはどこで入手できますか?
できません。
これらの権限の説明はどこで入手できますか?
それらの権限が文書化されているところはどこでも。多くの場合、それらは文書化されていないため、使用しないでください。
たとえば、最初の3つはAndroid数年前、IIRCから削除されました。最後の1つは C2DMドキュメント に記載されています。
確かに「もっと多くの許可」があります。 リンクした参照 は単なる「公式リスト」です。それでも、それはかなり不完全です。私は既存のアクセス許可、その目的、およびエンドユーザーに与える影響について、約1年ほど調査してきました。開発者がどのようにして必要なものを見つけるのか、本当に不思議に思っています。多くの権限について、Google検索はいくつかのアプリのManifest
ファイルのコンテンツを生成しただけなので( "uses…")、良い推測はその一部のようです。
それに加えて、「公式のアクセス許可」(または「Androidコアのアクセス許可」)の横に、各開発者は自分のアプリに対して独自に定義できます(- Charlie Collins ですでに指摘されています his答え )。
調査中、私はいくつかの情報源(一緒にリストしたもの)からの発見をリストに設定し、見つけた説明を追加しました。このリストは、エンドユーザーに重点を置いていますが、開発者にとって役立つ場合があります。 my site : Androidの権限の説明 –二か国語(英語とドイツ語)で確認できます。リストには、「コア権限」と、選択されたいくつかのアプリ固有のもの(ほとんどの場合、より頻繁に遭遇するもの:Googleアプリ、またはTaskerやK-9 Mail)。繰り返しますが、これはもちろん完全ではありません。「完全なリスト」はユニコーンと同じくらいありそうです(公開された日はおそらくすでに古くなっています)。
編集:
別のコメントで求められたように:new権限でパッケージをインストールしたが、まだどのリストにも含まれておらず、その新しい「技術名」を知りたい場合権限があれば、ADB経由でデバイスからその情報を取得できます。
adb Shell dumpsys package com.foo.bar
(もちろん、com.foo.bar
を問題のパッケージの名前に置き換えます)。出力で、行grantedPermissions:
までスキップします。その下には、「完全表記」での許可があります。 Android.permission.INTERNET
、1行に1つ。それを簡単にするために:
adb Shell dumpsys package com.foo.bar |egrep -A99999 "grantedPermissions:"
私はこれが遅い投稿であることを知っていますが、これは同じ質問をしている将来の人々のためのリファレンスです。
ここ は、すべてのビルトイン権限のリストですAndroid 7.0(Nougatただし、独自の権限を作成することは可能ですので、リストにはそれらのすべてが含まれていません。
それが役に立てば幸い:)
次のコードを使用して、デバイスのすべての権限を取得できます。
public static List<PermissionInfo> getAllPermissions(Context context) {
PackageManager pm = context.getPackageManager();
List<PermissionInfo> permissions = new ArrayList<>();
List<PermissionGroupInfo> groupList = pm.getAllPermissionGroups(0);
groupList.add(null); // ungrouped permissions
for (PermissionGroupInfo permissionGroup : groupList) {
String name = permissionGroup == null ? null : permissionGroup.name;
try {
permissions.addAll(pm.queryPermissionsByGroup(name, 0));
} catch (PackageManager.NameNotFoundException ignored) {
}
}
return permissions;
}