任何人都可以提供一些见解如何请求在Android Marshmallow中的用户定义的自定义运行时权限?我正在开发具有读取权限的自定义内容提供程序,另一个应用程序正在尝试使用自定义内容提供程序访问数据。Android:在运行时请求自定义权限
回答
我个人更喜欢使用权限库。取而代之的大型样板代码,他们往往是有效的,代码是非常精确的
@RuntimePermissions
public class MainActivity extends AppCompatActivity {
//sepcify permissions here
@NeedsPermission(Manifest.permission.CAMERA)
void showCamera() {
//work after permission is granted
}
@OnShowRationale({Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS})
void showRationaleForCamera(final PermissionRequest request) {
new AlertDialog.Builder(this)
.setMessage(R.string.permission_camera_rationale)
.setPositiveButton(R.string.button_allow, (dialog, button) -> request.proceed())
.setNegativeButton(R.string.button_deny, (dialog, button) -> request.cancel())
.show();
}
@OnPermissionDenied({Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS})
void showDeniedForCamera() {
//works when permissions denied
Toast.makeText(this, R.string.permission_camera_denied, Toast.LENGTH_SHORT).show();
}
@OnNeverAskAgain({Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS})
void showNeverAskForCamera() {
Toast.makeText(this, R.string.permission_camera_neverask, Toast.LENGTH_SHORT).show();
}
}
感谢您的示例。你可以给我一些关于如何使用自定义的权限的例子。 –
如果你要求多个权限像read_storage和相机..等等,那么我有更新我的答案你可以定义许多你想要的许可 – Vicky
这些都是内置的权限。我正在寻找一个用户定义权限的例子。如何处理用户定义的用户定义的自定义权限? –
这对我的作品。
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_ID_MULTIPLE_PERMISSIONS = 1;
private boolean checkAndRequestPermissions() {
Context context=getApplicationContext();
int locationpermission = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION);
int readphonestatepermission = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE);
int permissionSendMessage = ContextCompat.checkSelfPermission(context,Manifest.permission.SEND_SMS);
int writepermission = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);
int readexternalstoragepermission = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE);
List<String> listPermissionsNeeded = new ArrayList<>();
if (locationpermission != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (readphonestatepermission != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE);
}
if (permissionSendMessage != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.SEND_SMS);
}
if (writepermission != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (readexternalstoragepermission != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (!listPermissionsNeeded.isEmpty()) {
requestPermissions(listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
return false;
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_ID_MULTIPLE_PERMISSIONS) {
if (grantResults.length > 0) {
for (int i = 0; i < permissions.length; i++) {
if (permissions[i].equals(Manifest.permission.ACCESS_FINE_LOCATION)) {
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
Log.e("msg", "location granted");
}
} else if (permissions[i].equals(Manifest.permission.READ_PHONE_STATE)) {
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
Log.e("msg", "read phone state granted");
}
} else if (permissions[i].equals(Manifest.permission.SEND_SMS)) {
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
Log.e("msg", "sms granted");
}
}else if (permissions[i].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
Log.e("msg", "write external granted");
}
}else if (permissions[i].equals(Manifest.permission.READ_EXTERNAL_STORAGE)) {
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
Log.e("msg", "read external storage granted");
Toast.makeText(SplashActivity.this, "Please Restart the Application....... ", Toast.LENGTH_LONG).show();
}
}else if (permissions[i].equals(Manifest.permission.READ_LOGS)) {
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
Log.e("msg", "read logs granted");
}
}
}
}
}
}
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle v) {
// TODO Auto-generated method stub
super.onCreate(v);
setContentView(R.layout.activity_splash);
if (checkAndRequestPermissions()) {
Toast.makeText(MainActivity.this, "Granted all permissions", Toast.LENGTH_SHORT).show();
}
}
}
谢谢@Amol。这是内置权限的示例。你能否提供一些处理用户定义权限的例子。 –
谢谢。这工作@Amol –
- 1. 从Android中的自定义对话框请求运行时权限
- 2. 我想要在应用运行时android Marshmallow请求权限..!
- 3. 在运行时请求权限位置Android Marshmallow 6.0 webview
- 4. Android:请求多个权限时仅请求第一个权限
- 5. Android:请求运行时权限没有任何反应?
- 6. 请求facebook权限时显示自定义消息
- 7. 问:在运行时请求权限,何时何地?
- 8. 在请求运行时权限时关闭应用程序
- 9. 定义自定义权限Android
- 10. Android偏好特定权限请求
- 11. Android请求多权限
- 12. 如何在应用程序启动时请求Android中的运行时权限?
- 13. 在运行时请求写入Program Files目录的权限
- 14. 尝试请求运行时权限时出错
- 15. Android应用程序可以在运行时请求附加权限吗?
- 16. 在运行时询问权限Android M +
- 17. 在运行时Android权限与片段
- 18. Android:函数没有在运行时权限在Android中运行
- 19. 自定义Google脚本授权请求
- 20. 如何从自定义首选项请求权限?
- 21. 请求代码在Android的权限
- 22. 运行时权限请求暂停活动
- 23. 请求运行时权限后,片段变为空白
- 24. Android的自定义权限 - 棉花糖
- 25. 请求写权限
- 26. react-native询问Android运行时权限
- 27. 使用SDK的Android运行时权限
- 28. Android中的运行时权限
- 29. 处理Android运行时权限
- 30. Android M运行时权限问题
我已经回答了类似的问题。请参阅[这里](http://stackoverflow.com/a/40639430/3423932)。 – muthuraj
这是一个老问题,但我碰到了自定义权限问题的“安装顺序依赖”,并且无法使用其他解决方案(如“签名”保护),因为其他应用程序是由另一个开发人员开发的。您应该可以像请求系统权限一样请求自定义权限,但请确保自定义权限具有权限组和“危险”保护级别。有了这两项要求,系统将提供运行时权限请求。 – AChez9