Отказ в разрешении, даже после добавления правильного разрешения в манифест - PullRequest
4 голосов
/ 25 марта 2012

Я занимаюсь разработкой приложения, которое прослушивает входящие смс. Я добавил разрешение:

<uses-permission android:name="android.permission.RECEIVE_SMS" />

к моему манифесту приложения. И да, это не внутри тега получателя.

Я пытаюсь протестировать приложение, отправив смс с одного эмулятора на другой. Мой logcat получает следующую запись:

WARN/ActivityManager(66): Permission Denial: receiving Intent { act=android.provider.Telephony.SMS_RECEIVED (has extras) } to com.android.LUC requires android.permission.RECEIVE_SMS due to sender com.android.phone (uid 1001)

Странная часть в том, что когда я тестирую приложение на эмуляторе под управлением Android 3.2, оно работает нормально!

Манифест приложения:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.android.sms"
      android:versionCode="1"
      android:versionName="1.0">

    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />

    <application android:icon="@drawable/icon" android:label="@string/app_name" android:permission="android.permission.RECEIVE_SMS">
        <activity android:name=".TestSMSReceiveActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name=".mysmstestcall" android:enabled="true">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

    </application>
</manifest>

mysmstestcall - это класс вещательного приемника, а TestSMSReceiveActivity - основное действие. Приложение не может получить сообщение в эмуляторе под управлением Android 2.2. Пожалуйста, помогите !!

1 Ответ

6 голосов
/ 28 марта 2012

ОК, проблема в вашем манифесте. Мой рабочий приемник SMS-рассылки имеет следующую запись манифеста:

<receiver
    android:name=".IncomingSmsBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

Вам не нужен атрибут разрешения Android: разрешение на приемнике. Для получения трансляции и просмотра содержимого сообщения вам просто необходимо следующее разрешение:

<uses-permission android:name="android.permission.RECEIVE_SMS" />

Чаще всего пропускается android:exported="true" при объявлении получателя, который необходим при получении широковещательной передачи, исходящей из-за пределов вашего собственного приложения. Излишне говорить, что по умолчанию для этого свойства установлено значение «false». Счастливого получения SMS.

...