是否可以在小于 23 的 SDK 上设置 checkSelfPermission?
Is it available to set checkSelfPermission on minimum SDK < 23?
Android-M 中的新运行时权限要求最低 23 API 级别,但我的项目仍然需要最低 16 API 级别。
那么,如何让这段代码更向前兼容呢?
此致
Use ContextCompat.checkSelfPermission()
, ActivityCompat.requestPermissions()
, and ActivityCompat.shouldShowPermissionRequestRationale()
,来自 support-v4
库(v23 或更高版本)。这些是向后兼容的;如果您 运行 使用旧版本的 Android,他们将 "do the right thing"(例如 return PackageManager.PERMISSION_GRANTED
代表 ContextCompat.checkSelfPermission()
)。
您可以查看构建版本if(Build.Version.SDK_INT >= Build.VERSION_CODES.MARSHMALLOW)
。然后在那里处理棉花糖权限,否则处理其他版本。
在获得检查权限之前检查您的 android 版本:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// public void requestPermissions(@NonNull String[] permissions, int requestCode)
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for Activity#requestPermissions for more details.
return;
}
}else{
//Do Your Stuff
}
如果您不想使用 AppCompatActivity,请按此处所述方式使用
https://codemammoth.blogspot.gr/2016/06/how-to-invoke-checkselfpermission.html
您必须调用这些方法:)
checkSelfPermission 在 sdk 23 以上可用。
我们可以使用包管理器检查权限是否可用
public static Boolean checkpermissions(Activity activity) {
PackageManager mPackageManager = activity.getPackageManager();
int hasPermStorage = mPackageManager.checkPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE, activity.getPackageName());
if (hasPermStorage != PackageManager.PERMISSION_GRANTED) {
// do stuff
//Toast.makeText(getApplicationContext(), "No permission", Toast.LENGTH_LONG).show();
return false;
} else if (hasPermStorage == PackageManager.PERMISSION_GRANTED) {
// do stuff
//Toast.makeText(getApplicationContext(), "Has permission", Toast.LENGTH_LONG).show();
return true;
}else
return false;
}
Android-M 中的新运行时权限要求最低 23 API 级别,但我的项目仍然需要最低 16 API 级别。
那么,如何让这段代码更向前兼容呢?
此致
Use ContextCompat.checkSelfPermission()
, ActivityCompat.requestPermissions()
, and ActivityCompat.shouldShowPermissionRequestRationale()
,来自 support-v4
库(v23 或更高版本)。这些是向后兼容的;如果您 运行 使用旧版本的 Android,他们将 "do the right thing"(例如 return PackageManager.PERMISSION_GRANTED
代表 ContextCompat.checkSelfPermission()
)。
您可以查看构建版本if(Build.Version.SDK_INT >= Build.VERSION_CODES.MARSHMALLOW)
。然后在那里处理棉花糖权限,否则处理其他版本。
在获得检查权限之前检查您的 android 版本:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// public void requestPermissions(@NonNull String[] permissions, int requestCode)
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for Activity#requestPermissions for more details.
return;
}
}else{
//Do Your Stuff
}
如果您不想使用 AppCompatActivity,请按此处所述方式使用 https://codemammoth.blogspot.gr/2016/06/how-to-invoke-checkselfpermission.html
您必须调用这些方法:)
checkSelfPermission 在 sdk 23 以上可用。
我们可以使用包管理器检查权限是否可用
public static Boolean checkpermissions(Activity activity) {
PackageManager mPackageManager = activity.getPackageManager();
int hasPermStorage = mPackageManager.checkPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE, activity.getPackageName());
if (hasPermStorage != PackageManager.PERMISSION_GRANTED) {
// do stuff
//Toast.makeText(getApplicationContext(), "No permission", Toast.LENGTH_LONG).show();
return false;
} else if (hasPermStorage == PackageManager.PERMISSION_GRANTED) {
// do stuff
//Toast.makeText(getApplicationContext(), "Has permission", Toast.LENGTH_LONG).show();
return true;
}else
return false;
}