我想获得用户的5个权限
我的代码:
public void requestPerm() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
if (checkSelfPermission(android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
String[] permissions = {android.Manifest.permission.CAMERA};
ActivityCompat.requestPermissions(this,permissions, 1);
}
if (checkSelfPermission(android.Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
String[] permissions = {android.Manifest.permission.READ_PHONE_STATE};
ActivityCompat.requestPermissions(this,permissions, 1);
}
if (checkSelfPermission(android.Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
String[] permissions = {android.Manifest.permission.RECORD_AUDIO};
ActivityCompat.requestPermissions(this,permissions, 1);
}
if (checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
String[] permissions = {android.Manifest.permission.READ_EXTERNAL_STORAGE};
ActivityCompat.requestPermissions(this,permissions, 1);
}
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
String[] permissions = {android.Manifest.permission.WRITE_EXTERNAL_STORAGE};
ActivityCompat.requestPermissions(this,permissions, 1);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case 1: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.i("errorCheck","YES");
startRequest();
} else {
Log.i("errorCheck","NO");
}
}
}
}
并使用requestPerm()
。MainActivity
onClickListener
点击用户获取requestPerm()
后,在用户点击允许或拒绝之前,我会两次登录“否”
我只想在点击用户ALLOW或DENY
上返回结果但现在,午餐requestPerm()
返回结果“NO”
答案 0 :(得分:0)
为每个权限使用不同的requestCode。
public void requestPerm() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
if (checkSelfPermission(android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
String[] permissions = {android.Manifest.permission.CAMERA};
ActivityCompat.requestPermissions(this,permissions, 100);
}
if (checkSelfPermission(android.Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
String[] permissions = {android.Manifest.permission.READ_PHONE_STATE};
ActivityCompat.requestPermissions(this,permissions, 101);
}
if (checkSelfPermission(android.Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
String[] permissions = {android.Manifest.permission.RECORD_AUDIO};
ActivityCompat.requestPermissions(this,permissions, 102);
}
if (checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
String[] permissions = {android.Manifest.permission.READ_EXTERNAL_STORAGE};
ActivityCompat.requestPermissions(this,permissions, 103);
}
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
String[] permissions = {android.Manifest.permission.WRITE_EXTERNAL_STORAGE};
ActivityCompat.requestPermissions(this,permissions, 104);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case 100: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.i("errorCheck","YES");
startRequest();
} else {
Log.i("errorCheck","NO");
}
}
}
}
并在onRequestPermissionsResult方法中相应地创建switch case。
仅当您要对不同的权限结果执行不同的操作时才使用此选项。
如果您想对所有权限执行相同的操作并且需要所有权限,那么您可以使用以下代码来处理权限:
private void checkForPermission(final boolean askForPermission) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) //Check all permission here. {
android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(this);
builder.setMessage("We need to access your phone book to identify calls from unknown numbers.");
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (askForPermission) {
ActivityCompat.requestPermissions(Auto_MissedCall_HandlingActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST); //Ask for all permission at time here with single result code.
}
}
});
builder.show();
} else {
/* All Permission Allow Do your code here*/
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case MY_PERMISSIONS_REQUEST:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
/*All Permission Allow and Do Your Code here*/
} else {
android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(this);
builder.setMessage("Oops permission denied");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.show();
}
return;
}
}
并且不要忘记在Menifest.xml中添加所有权限
Menifest.xml
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_CONTACTS" />
答案 1 :(得分:0)
Android Marshmallow还支持在应用启动或按钮点击时一次处理多个权限。此功能允许我们一次请求不同的权限,因此每次应用程序想要访问某些数据时都不需要再次请求权限。
在代码的Launcher Activity中使用以下代码:
Menifest.xml
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_CONTACTS" />
您的活动如下所示:
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import static android.Manifest.permission.CAMERA;
import static android.Manifest.permission.READ_CONTACTS;
import static android.Manifest.permission.READ_PHONE_STATE;
public class MainActivity extends AppCompatActivity {
Button button;
public static final int RequestPermissionCode = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(checkPermission()){
Toast.makeText(MainActivity.this, "All Permissions Granted Successfully", Toast.LENGTH_LONG).show();
}
else {
requestPermission();
}
}
});
}
private void requestPermission() {
ActivityCompat.requestPermissions(MainActivity.this, new String[]
{
CAMERA,
READ_CONTACTS,
READ_PHONE_STATE
}, RequestPermissionCode);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case RequestPermissionCode:
if (grantResults.length > 0) {
boolean CameraPermission = grantResults[0] == PackageManager.PERMISSION_GRANTED;
boolean ReadContactsPermission = grantResults[1] == PackageManager.PERMISSION_GRANTED;
boolean ReadPhoneStatePermission = grantResults[2] == PackageManager.PERMISSION_GRANTED;
if (CameraPermission && ReadContactsPermission && ReadPhoneStatePermission) {
Toast.makeText(MainActivity.this, "Permission Granted", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(MainActivity.this,"Permission Denied",Toast.LENGTH_LONG).show();
}
}
break;
}
}
public boolean checkPermission() {
int FirstPermissionResult = ContextCompat.checkSelfPermission(getApplicationContext(), CAMERA);
int SecondPermissionResult = ContextCompat.checkSelfPermission(getApplicationContext(), READ_CONTACTS);
int ThirdPermissionResult = ContextCompat.checkSelfPermission(getApplicationContext(), READ_PHONE_STATE);
return FirstPermissionResult == PackageManager.PERMISSION_GRANTED &&
SecondPermissionResult == PackageManager.PERMISSION_GRANTED &&
ThirdPermissionResult == PackageManager.PERMISSION_GRANTED;
}
}