直到现在我使用较低版本,所以我在我的应用程序的清单文件中添加了权限。但是在android 6.0 marshmallow中我们需要使用运行时权限。
任何人都可以解释如何在6.0中使用权限或提供任何链接。 提前致谢。
代码:
private static final int REQUEST_CAMERA = 0;
private static final int REQUEST_CONTACTS = 1;
private static final int REQUEST_LOCATION = 2;
private static final int REQUEST_PHONE = 3;
private static final int REQUEST_SMS = 4;
private static final int REQUEST_STORAGE = 5;
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch(requestCode) {
case REQUEST_CAMERA:
if (canAccessCamera()) {
doCameraThing();
}
else {
bzzzt();
}
break;
case REQUEST_CONTACTS:
if (canAccessContacts()&&canAccessContacts1()) {
doContactsThing();
}
else {
bzzzt();
}
break;
case REQUEST_LOCATION:
if (canAccessLocation()&&canAccessLocation_1()) {
doLocationThing();
}
else {
bzzzt();
}
break;
case REQUEST_PHONE:
if (canAccessPhone()) {
dophoneThing();
}
else {
bzzzt();
}
break;
case REQUEST_SMS:
if (canAccessSms()&&canAccessSms1() && canAccessSms2()) {
doSmsThing();
}
else {
bzzzt();
}
break;
case REQUEST_STORAGE:
if (canAccessStorage()) {
dostorageThing();
}
else {
bzzzt();
}
break;
}
}
//location
private boolean canAccessLocation() {
return(hasPermission(Manifest.permission.ACCESS_FINE_LOCATION));
}
private boolean canAccessLocation_1() {
return(hasPermission(Manifest.permission.ACCESS_COARSE_LOCATION));
}
//phone
private boolean canAccessPhone() {
return(hasPermission(Manifest.permission.READ_PHONE_STATE));
}
private boolean canAccessStorage() {
return(hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE));
}
//sms
private boolean canAccessSms() {
return(hasPermission(Manifest.permission.READ_SMS));
}
private boolean canAccessSms1() {
return(hasPermission(Manifest.permission.SEND_SMS));
}
private boolean canAccessSms2() {
return(hasPermission(Manifest.permission.RECEIVE_SMS));
}
//camera
private boolean canAccessCamera() {
return(hasPermission(Manifest.permission.CAMERA));
}
//contact
private boolean canAccessContacts() {
return(hasPermission(Manifest.permission.READ_CONTACTS));
}
private boolean canAccessContacts1() {
return(hasPermission(Manifest.permission.WRITE_CONTACTS));
}
private boolean hasPermission(String perm) {
return(PackageManager.PERMISSION_GRANTED==checkSelfPermission(perm));
}
private void bzzzt() {
Toast.makeText(this, R.string.toast_bzzzt, Toast.LENGTH_LONG).show();
}
private void doCameraThing() {
Toast.makeText(this, R.string.toast_camera, Toast.LENGTH_SHORT).show();
}
private void doContactsThing() {
Toast.makeText(this, R.string.toast_contacts, Toast.LENGTH_SHORT).show();
}
private void doLocationThing() {
Toast.makeText(this, R.string.toast_location, Toast.LENGTH_SHORT).show();
}
private void doSmsThing() {
Toast.makeText(this, R.string.toast_sms, Toast.LENGTH_SHORT).show();
}
private void dostorageThing() {
Toast.makeText(this, R.string.toast_storage, Toast.LENGTH_SHORT).show();
}
private void dophoneThing() {
Toast.makeText(this, R.string.toast_phone, Toast.LENGTH_SHORT).show();
}
<string name="toast_camera">Camera Permissions have been granted!</string>
<string name="toast_contacts">Contacts Permissions have been granted</string>
<string name="toast_location">Location Permissions have been granted</string>
<string name="toast_phone">Phone Permissions have been granted!</string>
<string name="toast_storage">Storage Permissions have been granted</string>
<string name="toast_sms">Sms Permissions have been granted</string>
我写了这段代码。但我在android 6.0中测试过。它又崩溃了。请告诉我我做错了什么。