
Android アプリに設定されたパーミッションを取得する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
もしmanifestに設定されていないパーミッションが必要な機能を使うと無慈悲なSecurityExceptionが発生します。 それはもう、catch節をスルーするくらい無慈悲です。 このExceptionが発生するという事は、manifestとコードが不一致だということなので、コード直せボケ! なのかもしれませんが、やはりコード内でパーミッションをチェックして条件分岐したい事もあるものです。 例えばライブラリとして公開する場合とか。 そんなわけで、パーミッションのリストを取得するメソッドと、お目当てのパーミッションがmanifestに存在するのか確認するメソッドをお届けします。 [code lang="java" light="true"] /** * 指定されたパーミッションがmanifestに記載されているかどうか確認します。 * * @param checkPermission 調査するパーミッション * @param context コンテキスト * @return true:記載されている /false:記載されていない */ public boolean hasPermission(String checkPermission, Context context) { if (checkPermission == null || context == null) { // 引数が渡されていないケース return false; } String[] requestedPermissions = getPermissionList(context); if (requestedPermissions == null) { // manifestに一件もpermissionが設定されていないケース return false; } for (String str : requestedPermissions) { if (str.equals(checkPermission)) { // 調査するパーミッションが存在したケース return true; } } // 調査するパーミッションが存在しなかったケース return false; } /** * manifestに記載されているパーミッションのリストを返します。 * * @return パーミッションのリスト */ public String[] getPermissionList(Context context) { PackageManager packageManager = context.getPackageManager(); PackageInfo packageInfo = null; try { packageInfo = packageManager.getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS); } catch (NameNotFoundException e) { return null; } return packageInfo.requestedPermissions; } [/code] 使い方 [code lang="java" light="true"] String checkPermisson = "android.permission.READ_PHONE_STATE"; if (hasPermission(checkPermisson, context)) { Log.d("TAG", checkPermisson + " exist!"); } else { Log.d("TAG", checkPermisson + " not exist!"); } [/code] お役に立てば。 |