如何检查权限和请求权限(Easy coding & easy understand)
How to check permission and request permission in (Easy coding & easy to understand)
我在 android 中搜索 运行-Time-Permission,我找到了很多链接,但我发现其中有复杂的代码。
注意:我在这里分享我的简单代码,这对新开发人员或 Fraser 很有帮助。另外,我这里没有使用任何第三方库。
首先,在Manifest
文件中写入权限(我有一些基本权限):
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
现在我做了两个方法 checkPermission()
和 requestPermission()
还有 @Override
一个方法名是 onRequestPermissionsResult()
这是处理结果。
现在我将向您展示它的样子:
private boolean checkPermission() {
int internetPermission = ContextCompat.checkSelfPermission(getApplicationContext(), INTERNET);
int cameraPermission = ContextCompat.checkSelfPermission(getApplicationContext(), CAMERA);
int readStoragePermission = ContextCompat.checkSelfPermission(getApplicationContext(), READ_EXTERNAL_STORAGE);
int writeStoragePermission = ContextCompat.checkSelfPermission(getApplicationContext(), WRITE_EXTERNAL_STORAGE);
return internetPermission == PackageManager.PERMISSION_GRANTED &&
cameraPermission == PackageManager.PERMISSION_GRANTED &&
readStoragePermission == PackageManager.PERMISSION_GRANTED &&
writeStoragePermission == PackageManager.PERMISSION_GRANTED;
}
您在上面的代码中看到定义了 INTERNET、CAMERA 等。这是通过单击 Alt + Enter 进行导入它看起来像下面的代码:
import static android.Manifest.permission.CAMERA;
import static android.Manifest.permission.INTERNET;
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
现在请看下面requestPermission()
方法的代码:
private void requestPermission() {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{INTERNET, CAMERA, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE}, 1);
}
现在最后一个方法是onRequestPermissionsResult()
。在此方法中,您可以看到权限是 GRANTED 还是 DENY:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0) {
boolean internet = grantResults[0] == PackageManager.PERMISSION_GRANTED;
boolean camera = grantResults[1] == PackageManager.PERMISSION_GRANTED;
boolean readStorage = grantResults[2] == PackageManager.PERMISSION_GRANTED;
boolean writeStorage = grantResults[3] == PackageManager.PERMISSION_GRANTED;
if (internet && camera && readStorage && writeStorage) {
init();
// Permission GRANTED (Here write your code what you want).
} else {
// Permission DENY (If user click on DENY then finish the activity);
finish();
}
}
}
}
太好了,您已完成 checkPermission 和 requestPermission。
注意:
以上代码适用于 Activity
。片段中有一个小的变化。
如果我在片段中使用此代码,那么我应该更改什么:
You want to just change in requestPermission()
Method:
private void requestPermission() {
requestPermissions(new String[]{INTERNET, CAMERA, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE}, 1);
}
请尝试消除依赖性
步骤:1
dependencies{
implementation 'com.karumi:dexter:6.0.2'
}
步骤:2
Dexter.withActivity(this)
.withPermission(Manifest.permission.CAMERA)
.withListener(new PermissionListener() {
@Override public void onPermissionGranted(PermissionGrantedResponse response) {/*
@Override public void onPermissionDenied(PermissionDeniedResponse response) {/*
@Override public void onPermissionRationaleShouldBeShown(PermissionRequest
permission, PermissionToken token) {/* ... */}
}).check();
我在 android 中搜索 运行-Time-Permission,我找到了很多链接,但我发现其中有复杂的代码。
注意:我在这里分享我的简单代码,这对新开发人员或 Fraser 很有帮助。另外,我这里没有使用任何第三方库。
首先,在Manifest
文件中写入权限(我有一些基本权限):
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
现在我做了两个方法 checkPermission()
和 requestPermission()
还有 @Override
一个方法名是 onRequestPermissionsResult()
这是处理结果。
现在我将向您展示它的样子:
private boolean checkPermission() {
int internetPermission = ContextCompat.checkSelfPermission(getApplicationContext(), INTERNET);
int cameraPermission = ContextCompat.checkSelfPermission(getApplicationContext(), CAMERA);
int readStoragePermission = ContextCompat.checkSelfPermission(getApplicationContext(), READ_EXTERNAL_STORAGE);
int writeStoragePermission = ContextCompat.checkSelfPermission(getApplicationContext(), WRITE_EXTERNAL_STORAGE);
return internetPermission == PackageManager.PERMISSION_GRANTED &&
cameraPermission == PackageManager.PERMISSION_GRANTED &&
readStoragePermission == PackageManager.PERMISSION_GRANTED &&
writeStoragePermission == PackageManager.PERMISSION_GRANTED;
}
您在上面的代码中看到定义了 INTERNET、CAMERA 等。这是通过单击 Alt + Enter 进行导入它看起来像下面的代码:
import static android.Manifest.permission.CAMERA;
import static android.Manifest.permission.INTERNET;
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
现在请看下面requestPermission()
方法的代码:
private void requestPermission() {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{INTERNET, CAMERA, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE}, 1);
}
现在最后一个方法是onRequestPermissionsResult()
。在此方法中,您可以看到权限是 GRANTED 还是 DENY:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0) {
boolean internet = grantResults[0] == PackageManager.PERMISSION_GRANTED;
boolean camera = grantResults[1] == PackageManager.PERMISSION_GRANTED;
boolean readStorage = grantResults[2] == PackageManager.PERMISSION_GRANTED;
boolean writeStorage = grantResults[3] == PackageManager.PERMISSION_GRANTED;
if (internet && camera && readStorage && writeStorage) {
init();
// Permission GRANTED (Here write your code what you want).
} else {
// Permission DENY (If user click on DENY then finish the activity);
finish();
}
}
}
}
太好了,您已完成 checkPermission 和 requestPermission。
注意:
以上代码适用于 Activity
。片段中有一个小的变化。
如果我在片段中使用此代码,那么我应该更改什么:
You want to just change in
requestPermission()
Method:
private void requestPermission() {
requestPermissions(new String[]{INTERNET, CAMERA, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE}, 1);
}
请尝试消除依赖性
步骤:1
dependencies{
implementation 'com.karumi:dexter:6.0.2'
}
步骤:2
Dexter.withActivity(this)
.withPermission(Manifest.permission.CAMERA)
.withListener(new PermissionListener() {
@Override public void onPermissionGranted(PermissionGrantedResponse response) {/*
@Override public void onPermissionDenied(PermissionDeniedResponse response) {/*
@Override public void onPermissionRationaleShouldBeShown(PermissionRequest
permission, PermissionToken token) {/* ... */}
}).check();