Android Marshmallow如何请求权限?

202

我目前正在开发一个需要多个“危险”权限的应用程序。因此,我尝试在Android Marshmallow(API级别23)中添加“请求权限”,但无法找到如何执行的方法。

如何在我的应用程序中使用新的权限模型请求权限?


1
看这里,这就是你需要的全部内容:https://developer.android.com/training/permissions/requesting.html - Thomas R.
1
请看这个链接:http://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en - Dory
你有没有看过Google在GitHub上的示例代码库? - IgorGanapolsky
当时我刚接触安卓开发,看了developer.android.com/training/permissions/requesting.html这个网页,后来安卓6.0发布了,Google的培训让我更加困惑,而且找不到任何相关教程。 - Nilabja
https://dev59.com/G1sW5IYBdhLWcg3wSFnX#52708289 - HAXM
显示剩余2条评论
26个回答

0

在应用程序中的任何位置运行时权限这里是示例

use dependency
maven { url 'https://jitpack.io' }
dependencies {
implementation 'com.github.irshadsparky:PermissionLib:master-SNAPSHOT'
}

并且像这样调用代码:

PermissionHelper.requestCamera(new PermissionHelper.OnPermissionGrantedListener() {
@Override
public void onPermissionGranted() {

}
});

你可以在Github上找到更多信息。


0

你可以使用我的库 — NoPermission(它只有一个类)

compile 'ru.alexbykov:nopermission:1.1.1'

示例

PermissionHelper permissionHelper = new PermissionHelper(this); //don't use getActivity in fragment!

permissionHelper.check(Manifest.permission.READ_CONTACTS)
                .onSuccess(this::onSuccess)
                .onDenied(this::onDenied)
                .onNeverAskAgain(this::onNeverAskAgain)
                .run();

onRequestPermissionResult:

 @Override
  public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
        permissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);
   }

我认为 API 比 Google 的 EasyPermissions 更方便。


0
  if (CommonMethod.isNetworkAvailable(MainActivity.this)) {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                        int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this,
                                android.Manifest.permission.CAMERA);
                        if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
                            //showing dialog to select image
                            callFacebook();
                            Log.e("permission", "granted MarshMallow");
                        } else {
                            ActivityCompat.requestPermissions(MainActivity.this,
                                    new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE,
                                            android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.CAMERA}, 1);
                        }
                    } else {
                        Log.e("permission", "Not Required Less than MarshMallow Version");
                        callFacebook();
                    }
                } else {
                    CommonMethod.showAlert("Internet Connectivity Failure", MainActivity.this);
                }

0

只需要这样就可以了:

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.READ_CONTACTS}, 0);
        }


0

运行时权限会在活动中创建大量的模板代码,并且高度耦合。为了减少代码并使事情变得简单,您可以使用Dexter库。


0

Android中的运行时权限

private static final int PERMISSION_REQ_WRITE_EXTERNAL_STORAGE = 101;

public void onClick(View view) {
    if (view.getId() == yourBtn.getId()) {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
            this.storageWork();
        } else {
            ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, PERMISSION_REQ_WRITE_EXTERNAL_STORAGE);
        }
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == PERMISSION_REQ_WRITE_EXTERNAL_STORAGE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            this.storageWork();
        }
    }
}

public void storageWork(){
}

OnClick方法用于检查运行时权限

如果权限受限,则请求权限


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接