Android无法理解并为KitKat设备制作SmsReceiver

时间:2014-06-30 15:08:09

标签: android sms broadcastreceiver android-4.4-kitkat

我关注了DevBytes的视频 - Android 4.4 SMS API - http://www.youtube.com/watch?v=mdq0R2WQssQ

没有运气,我无法编写可以接收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>

接收器:

公共类KitKatSmsReceiver扩展了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) {

         }
    }
}

}

此外,我意识到你需要让我的应用程序成为默认应用程序,如果我不这样做但仍然首先捕获短信而不是默认的短信应用程序该怎么办?

由于

1 个答案:

答案 0 :(得分:0)

所需权限:

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

另外,在<application>标记之前添加权限,而不是在接收者中添加权限。

清单中的BroadcastReciever应如下所示:

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