即使我已经声明 Android 权限也不起作用 [英] Android permission doesn't work even if I have declared it
问题描述
我正在尝试编写代码以从 Android 应用程序发送短信,但是当我尝试发送短信时,它向我发送了错误消息:
I'm trying to write code to send an SMS from an Android app, but when I try to send the SMS it sends me back the error:
09-17 18:37:29.974 12847-12847/**.**.****E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: **.**.****, PID: 12847
java.lang.SecurityException: Sending SMS message: uid 10092 does not have android.permission.SEND_SMS.
at android.os.Parcel.readException(Parcel.java:1599)
at android.os.Parcel.readException(Parcel.java:1552)
at com.android.internal.telephony.ISms$Stub$Proxy.sendTextForSubscriber(ISms.java:768)
at android.telephony.SmsManager.sendTextMessageInternal(SmsManager.java:310)
at android.telephony.SmsManager.sendTextMessage(SmsManager.java:293)
at **.**.****.MainActivity$3.onClick(MainActivity.java:70)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我检查过,但我在清单中有权限,如下:
I checked but I have the permissions in the manifest, as follows:
<?xml version="1.0" encoding="utf-8"?>
<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>
我搜索了互联网,但所有错误都与<uses-permission/>
语法有关,您能帮帮我吗?
I searched the internet but all the errors were about the <uses-permission/>
syntax, could you help me please?
推荐答案
(以下摘自我的一篇博文)
现在没有得到你的许可的一个重要原因是因为您的项目的 targetSdkVersion
为 23 或更高,并且权限您要求的是危险的".在 Android 6.0 中,这包括:
The big reason for not getting your permission nowadays is because
your project has a targetSdkVersion
of 23 or higher, and the permission
that you are requesting is "dangerous". In Android 6.0, this includes:
ACCEPT_HANDOVER
ACCESS_BACKGROUND_LOCATION
ACCESS_MEDIA_LOCATION
ACTIVITY_RECOGNITION
ANSWER_PHONE_CALLS
ACCESS_COARSE_LOCATION
ACCESS_FINE_LOCATION
ADD_VOICEMAIL
BODY_SENSORS
CALL_PHONE
相机
GET_ACCOUNTS
PROCESS_OUTGOING_CALLS
READ_CALENDAR
READ_CALL_LOG
READ_CELL_BROADCASTS
READ_CONTACTS
READ_EXTERNAL_STORAGE
READ_PHONE_STATE
READ_SMS
RECEIVE_MMS
RECEIVE_SMS
RECEIVE_WAP_PUSH
RECORD_AUDIO
SEND_SMS
USE_SIP
WRITE_CALENDAR
WRITE_CALL_LOG
WRITE_CONTACTS
WRITE_EXTERNAL_STORAGE
对于这些权限,不仅您的 targetSdkVersion
23+ 应用需要有
元素,但你也有在运行时向 Android 6.0+ 用户请求这些权限设备,使用像 checkSelfPermission()
和requestPermissions()
.
For these permissions, not only does your targetSdkVersion
23+ app
need to have the <uses-permission>
element(s), but you also have
to ask for those permissions at runtime from the user on Android 6.0+
devices, using methods like checkSelfPermission()
and
requestPermissions()
.
作为临时解决方法,将您的 targetSdkVersion
降低到 23 以下.
As a temporary workaround, drop your targetSdkVersion
below 23.
然而,最终,你会有一些理由想要你的targetSdkVersion
为 23 或更高.届时,您将需要调整您的应用程序以使用新的运行时权限系统.Android 文档有专用于此主题的页面.
However, eventually, you will have some reason to want your
targetSdkVersion
to be 23 or higher. At that time, you will need
to adjust your app to use the new runtime permission system.
The Android documentation has
a page dedicated to this topic.
这篇关于即使我已经声明 Android 权限也不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!