引起︰java.lang.SecurityException︰android.permission.READ_PHONE_STATE
我想支持我的应用程序Android M?我有一些权限需要明确要求在运行时。我能够访问其他权限在运行时,但“ android.permission.READ_PHONE_STATE“导致SecurityException。引起︰java.lang.SecurityException︰android.permission.READ_PHONE_STATE
这里是我的清单文件:
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- Map related permissions -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<!-- -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
在您的应用的build.gradle
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="23" />
变化
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="22" />
并从这些manifest.xml中一行。 然后它也会在android M中工作。
请参阅本
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "your.package.name"
minSdkVersion 14
targetSdkVersion 22
// other lines defaultConfig
}
// other lines in android
}
对于Android的23或更高,如果他们想给你一个许可,你需要明确地询问你的用户。两种处理方法:除了在清单文件中指定外,还要将最大SDK版本设置为22(或更低),或者在运行时询问用户。
有关如何在运行时询问权限的详细信息,请参阅Working with System Permissions。 “Requesting Permissions at Run Time”会话从第一个链接中解释了如何在您的代码中以非常详细的方式执行此操作。
这就是说,在发布问题之前尝试做一些搜索。不鼓励重复的问题。
其它链接,可以帮助你:similar question on StackOverFlow
检查这个答案。 –
你需要requestPermissions
,这里的一些例子
private final static int REQUEST_CODE_ASK_PERMISSIONS = 1002;
@Override
protected void onStart() {
super.onStart();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int res = checkSelfPermission(Manifest.permission.READ_PHONE_STATE);
if (res != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE},
REQUEST_CODE_OVERLAY_PERMISSION);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_PERMISSIONS:
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this, "READ_PHONE_STATE Denied", Toast.LENGTH_SHORT)
.show();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
有关详细信息,请参阅GitHub
请发表您的gradle这个代码 – Amy
HTTPS我的代码://developer.android.com/intl/in/training/permissions/requesting.html –
@Amy我正在使用eclipse ..我没有看到任何gradle。 – Joe