#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 /…