Java 安卓权限不存在';即使我已经宣布,它也不能工作
我正试图编写代码从Android应用程序发送短信,但当我尝试发送短信时,它会将错误发回给我:Java 安卓权限不存在';即使我已经宣布,它也不能工作,java,android,android-permissions,Java,Android,Android Permissions,我正试图编写代码从Android应用程序发送短信,但当我尝试发送短信时,它会将错误发回给我: 09-17 18:37:29.974 12847-12847/*******E/AndroidRuntime﹕ 致命异常:主 流程:*****************,PID:12847 java.lang.SecurityException:发送SMS消息:uid 10092没有android.permission.SEND\u SMS。 位于android.os.Parcel.readExcepti
09-17 18:37:29.974 12847-12847/*******E/AndroidRuntime﹕ 致命异常:主
流程:*****************,PID:12847
java.lang.SecurityException:发送SMS消息:uid 10092没有android.permission.SEND\u SMS。
位于android.os.Parcel.readException(Parcel.java:1599)
在android.os.Parcel.readException(Parcel.java:1552)中
位于com.android.internal.telephony.ISms$Stub$Proxy.sendTextForSubscriber(ISms.java:768)
位于android.telephony.smsmsmanager.sendTextMessageInternal(SmsManager.java:310)
位于android.telephony.smsmsmanager.sendTextMessage(smsmsmanager.java:293)
在**.*.****.MainActivity$3.onClick(MainActivity.java:70)
在android.view.view.performClick上(view.java:5198)
在android.view.view$PerformClick.run(view.java:21147)
位于android.os.Handler.handleCallback(Handler.java:739)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:148)
位于android.app.ActivityThread.main(ActivityThread.java:5417)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我已选中,但我在清单中拥有以下权限:
<?xml version="1.0" encoding="utf-8"?>
我在网上搜索了一下,但是所有的错误都是关于
语法的,你能帮我一下吗?(以下摘录自)
现在没有得到你的许可的主要原因是
您的项目具有23或更高的targetSdkVersion
,并且
你所要求的是“危险的”。在Android 6.0中,这包括:
接受移交
ACCESS\u BACKGROUND\u LOCATION
访问媒体位置
活动识别
接听电话
ACCESS\u rough\u LOCATION
ACCESS\u FINE\u LOCATION
添加语音邮件
车身传感器
CALL\u电话
摄像机
GET\u账户
处理拨打的电话
阅读日历
READ\u CALL\u LOG
READ\u CELL\u广播
读取联系人
读取外部存储器
READ\u PHONE\u STATE
READ\u SMS
接收彩信
接收短信
RECEIVE\u WAP\u PUSH
录制音频
发送短信
使用\u SIP
写日历
WRITE\u CALL\u LOG
写入联系人
写入外部存储
targetSdkVersion
23+应用程序
需要有
元素,但您也有
在运行时向Android 6.0上的用户请求这些权限+
使用checkSelfPermission()
和
requestPermissions()
作为临时解决办法,请将targetSdkVersion
放在23下方
然而,最终,你会有一些理由想要你的
targetSdkVersion
为23或更高。到那时,你将需要
调整应用程序以使用新的运行时权限系统。
Android文档已经发布
.(以下摘自)
现在没有得到你的许可的主要原因是
您的项目具有23或更高的targetSdkVersion
,并且
你所要求的是“危险的”。在Android 6.0中,这包括:
接受移交
ACCESS\u BACKGROUND\u LOCATION
访问媒体位置
活动识别
接听电话
ACCESS\u rough\u LOCATION
ACCESS\u FINE\u LOCATION
添加语音邮件
车身传感器
CALL\u电话
摄像机
GET\u账户
处理拨打的电话
阅读日历
READ\u CALL\u LOG
READ\u CELL\u广播
读取联系人
读取外部存储器
READ\u PHONE\u STATE
READ\u SMS
接收彩信
接收短信
RECEIVE\u WAP\u PUSH
录制音频
发送短信
使用\u SIP
写日历
WRITE\u CALL\u LOG
写入联系人
写入外部存储
targetSdkVersion
23+应用程序
需要有
元素,但您也有
在运行时向Android 6.0上的用户请求这些权限+
使用checkSelfPermission()
和
requestPermissions()
作为临时解决办法,请将targetSdkVersion
放在23下方
然而,最终,你会有一些理由想要你的
targetSdkVersion
为23或更高。到那时,你将需要
调整应用程序以使用新的运行时权限系统。
Android文档已经发布
.如果您使用的是sdk 23或更高版本,则必须检查运行时权限。如果您使用的是sdk 23或更高版本,则必须检查运行时权限
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-feature android:name="android.hardware.telephony"
android:required="true"/>
<application
android:exported="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
ActivityCompat.requestPermissions();
int MY_PERMISSIONS_REQUEST_READ_CONTACTS=0;
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
private static final int PERMISSION_REQUEST_CODE = 1;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.SEND_SMS)
== PackageManager.PERMISSION_DENIED) {
Log.d("permission", "permission denied to SEND_SMS - requesting it");
String[] permissions = {Manifest.permission.SEND_SMS};
requestPermissions(permissions, PERMISSION_REQUEST_CODE);
}
}
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.SEND_SMS)
!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
// Ask for permision
ActivityCompat.requestPermissions(this,new String[] { Manifest.permission.SEND_SMS}, 1);
}
else {
// Permission has already been granted
}
READ_CALENDAR
WRITE_CALENDAR
CAMERA
READ_CONTACTS
WRITE_CONTACTS
GET_ACCOUNTS
ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
RECORD_AUDIO
READ_PHONE_STATE
READ_PHONE_NUMBERS
CALL_PHONE
ANSWER_PHONE_CALLS (must request at runtime)
READ_CALL_LOG
WRITE_CALL_LOG
ADD_VOICEMAIL
USE_SIP
PROCESS_OUTGOING_CALLS
ANSWER_PHONE_CALLS
BODY_SENSORS
SEND_SMS
RECEIVE_SMS
READ_SMS
RECEIVE_WAP_PUSH
RECEIVE_MMS
READ_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
1);
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case 1: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(MainActivity.this, "Permission denied to read your External storage", Toast.LENGTH_SHORT).show();
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
public boolean checkPermission() {
if (Build.VERSION.SDK_INT >= 23) {
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
Timber.tag(LOG_TAG).e("Permission error. You have permission");
return true;
} else {
Timber.tag(LOG_TAG).e("Permission error. You have asked for permission");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return false;
}
}
else {
// for a stuff below api level 23
Timber.tag(LOG_TAG).e("Permission error. You already have the permission");
return true;
}
}
adb shell dumpsys package <package-name>