Android не может понять и создать SMSReceiver для устройств KitKat

#android #sms #broadcastreceiver #android-4.4-kitkat

#Android #sms #broadcastreceiver #android-4.4-kitkat

Вопрос:

Я следил за видео DevBytes — Android 4.4 SMS API —http://www.youtube.com/watch?v=mdq0R2WQssQ

Мне не повезло, я не смог написать успешное приложение, которое может получать SMS-сообщения для устройств kitkat.

Я создал точный формат, который разработчик DevBytes сделал в своем видео, и когда я отправил сообщение в DDMS Debug, мой класс приемника не перешел к точке останова.

Манифест:

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <activity android:name="com.example.kitkatreceiver.DefaultAppDeliver">
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <action android:name="android.intent.action.SENDTO" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data android:scheme="sms" />
        <data android:scheme="smsto" />
        <data android:scheme="mms" />
        <data android:scheme="mmsto" />
    </intent-filter>

    </activity>

    <receiver android:name="com.example.kitkatreceiver.KitKatSmsReceiver"
              android:enabled="true"
              android:permission="android.permission.BROADCAST_SMS">
        <intent-filter android:priority="1000">
            <action android:name="android.provider.Telephony.SMS_DELIVER"/>
        </intent-filter>
    </receiver>

</application>
  

Приемник:

общедоступный класс kitkatssmsreceiver расширяет BroadcastReceiver{

 @Override
public void onReceive(Context arg0, Intent arg1) {
    // TODO Auto-generated method stub

    for (SmsMessage smsMessage : Telephony.Sms.Intents.getMessagesFromIntent(arg1)) {
        String messageBody = smsMessage.getMessageBody();
        Log.d("msg", messageBody);
    }

    Bundle b = arg1.getExtras();
    SmsMessage [] msgs;
    if(b != null) {
         Object[] pdus = (Object[]) b.get("pdus");
         msgs = new SmsMessage[pdus.length];
         for(int i=0; i<msgs.length; i  ){
             msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
         }
         for(SmsMessage msg : msgs) {

         }
    }
}
  

}

Также я понял, что вам нужно сделать мое приложение приложением по умолчанию, что, если я не буду этого делать, но все равно сначала поймаю SMS вместо приложения sms по умолчанию?

Спасибо

Комментарии:

1. Из документов: На Android 4.4 только одно приложение может получать новое намерение SMS_DELIVER_ACTION, которое система передает при поступлении нового SMS-сообщения. Какое приложение получает эту трансляцию, определяется тем, какое приложение пользователь выбрал в качестве приложения SMS по умолчанию в системных настройках. Итак, пока вы не сделаете свое приложение приложением по умолчанию, я не думаю, что вы сможете «сначала перехватить SMS».

Ответ №1:

Требуются разрешения :

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

Кроме того, добавьте разрешения непосредственно перед <application> тегом, а не внутри приемника.

Ваш BroadcastReceiver внутри манифеста должен выглядеть следующим образом :

 <receiver android:name="com.example.kitkatreceiver.KitKatSmsReceiver">  
    <intent-filter>
         <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>
  

Комментарии:

1. Привет, Шивам Верма, во-первых, спасибо за разрешение, которое я уже знал, но то, что вы предложили, для API < 4.4. я ищу решение, которое заключается в написании приемника, который принимал бы SMS-сообщение на устройстве KitKat, которое используется с SMS_DELIVERED

2. О, привет! не знал об этом. Спасибо 🙂

3. Кроме того, это вам наверняка поможет: android-developers.blogspot.sg/2013/10 /…