2017-03-07 3 views
-1

私はAndroidアプリでAndroidランタイムパーミッションを実装しています。私は、実行時に許可が許可されるか拒否されるかを確認することもできます。しかし、私は、ユーザーが最初にPermissionを拒否してから、Settingsのアプリケーション権限メニューで許可した場合、それがあるかどうかを知りたいと思う。設定からAndroidランタイムパーミッションを確認する

+0

ユーザーがあなたのアプリを使用している間はいつでもアクセス許可をチェックできます。なぜ、バックグラウンドで権限の変更を検出したいのですか? – Sony

答えて

0

(サービスは常に何らかの変更が生じたかどうかをチェックするために実行されていると仮定)私はI am also able to check if a permission is allowed or denied at runtimeのために少しトリックを権限

public final class Permissions { 

public static final int INTERNAL_STORAGE_REQUEST_CODE = 1; 
public static final int FINE_LOCATION_REQUEST_CODE = 2; 
private static final int COARSE_LOCATION_REQUEST_CODE = 3; 

public static final String READ_EXTERNAL_STORAGE = Manifest.permission.READ_EXTERNAL_STORAGE; 
public static final String ACCESS_FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION; 
public static final String ACCESS_COARSE_LOCATION = Manifest.permission.ACCESS_COARSE_LOCATION; 


public static boolean havePermissionFor(Context context, String permission) { 
    return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || 
      ActivityCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED; 

} 


public static void showPermissionDetails(String message, Context context, DialogInterface.OnClickListener okListener) { 
    M.showAlert(context, "Request for permission", message, "ALLOW", "DON'T ALLOW", okListener, null, false); 
} 

public static void requestForPermissions(Activity activity, String[] permissions, int permissionRequestCode) { 
    ActivityCompat.requestPermissions(activity, permissions, permissionRequestCode); 
} 

public static void requestPermissionForFragment(Fragment fragment, String[] permissions, int permissionRequestCode) { 
    fragment.requestPermissions(permissions, permissionRequestCode); 
} 

public static boolean shouldShowPermissionRationale(Activity activity, String permission) { 
    return ActivityCompat.shouldShowRequestPermissionRationale(activity, permission); 
} 


public ArrayList<String> getRequiredPermissions(Context context, String... permissions) { 
    ArrayList<String> requiredPermissionsList = new ArrayList<>(); 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return requiredPermissionsList; 
    for (String permission : permissions) { 
     if (!havePermissionFor(context, permission)) 
      requiredPermissionsList.add(permission); 
    } 
    return requiredPermissionsList; 

} 
} 
2

一つをチェックし、要求するため、以下のヘルパークラスを使用します。この詳細を保存(拒否または許可)してから、ユーザーが設定から何かを変更した場合は、アプリの権限機能で以前の詳細を簡単に比較できます。

例:保存された詳細が拒否され、その後、許可機能でアプリケーションを開くと、保存された詳細が拒否されたことが表示されますが、許可されていることがわかります。

+0

しかし、問題は、私のアプリは一度だけ開いて、それは常にバックグラウンドで実行されているということです –

関連する問題