2017-03-07 92 views
-1

我在我的Android应用中实现了Android运行时权限。我也能够检查运行时是否允许或拒绝权限。但是我想知道,如果用户首先拒绝权限,然后通过设置中的应用权限菜单允许它。 (假设一个服务一直运行,以检查是否发生任何改变)从设置中检查Android运行时权限

+0

您可以随时在需要时检查权限,而用户正在使用您的应用程序。为什么要检测后台权限的更改? – Sony

回答

0

我用下面的辅助类检查,并请求权限

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

I am also able to check if a permission is allowed or denied at runtime一个小把戏。保存此详细信息(拒绝或允许),然后如果用户从设置中更改了某些内容,则可以轻松比较应用程序权限功能中的以前的详细信息。

例如:您的保存的详细信息被拒绝,然后您通过设置允许通过设置后,如果您在权限功能中打开您的应用程序,您可以看到您保存的详细信息被拒绝,但现在您有权限,反之亦然。

+0

但问题是,我的应用程序只打开一次,然后它总是在后台运行:( –