拦截传入的短信三星 - Android

时间:2014-08-17 23:15:04

标签: android

我正在使用Java中的以下代码拦截SMS

public class SmsReceiver extends BroadcastReceiver {

     @Override
     public void onReceive(Context context, Intent intent) {

            Bundle extras = intent.getExtras();
            if (extras == null)
                   return;


            Object[] pdus = (Object[]) extras.get("pdus");
            for (int i = 0; i < pdus.length; i++) {
                   SmsMessage SMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
                   String sender = SMessage.getOriginatingAddress();
                   String body = SMessage.getMessageBody().toString();
                    Log.i("TAG", body);
                   //... do whatever with the message here


            }
     }
}

使用Manifest.xml中的以下接收器

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

它与Nexus 5一起运行良好,但它不在三星,任何人都知道如何让它在三星工作

1 个答案:

答案 0 :(得分:2)

Pre-KitKat短信广播可能会被拦截甚至中止,但环聊仍会处理该消息。看这篇文章:

Suppress / Block BroadcastReceiver in another app

而且:

Enabling SMS support in Hangouts 2.0 breaks the BroadcastReceiver of SMS_RECEIVED in my app

环聊注册了他们的AbortSmsRecevier优先级为“3”,因此将接收者优先级设置为“3”以上可以解决您的问题并拦截它。但是,如果您尝试将消息“首先”,那么“999”应该这样做。但是,请注意这并不理想,因为反垃圾邮件应用程序可能需要在应用程序执行之前处理邮件,具体取决于您的应用程序的功能。 (这个问题 - 应用程序“争夺最高优先级”是Android改变KitKat的原因,无论好坏......)

这是Google Talk / Babel清单的摘录:

    <receiver android:name="com.google.android.apps.babel.sms.AbortSmsReceiver" android:permission="android.permission.BROADCAST_SMS" android:enabled="false">
        <intent-filter android:priority="3">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>

如果您试图中止邮件,那么您将遇到问题。处理邮件的环聊SMS接收器设置为Integer.MAX_VALUE,但是中止邮件的接收器是我刚发布的那个。

这是另一个接收者:

    <receiver android:name="com.google.android.apps.babel.sms.SmsReceiver" android:permission="android.permission.BROADCAST_SMS" android:enabled="false">
        <intent-filter android:priority="2147483647">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>

注意:超过“999”或低于“-999”的优先级是“系统级别” - 但是,文档指出请求优先于此的优先级的非系统应用程序将具有“不可预测”的行为。这绝对是我所看到的 - 应用程序无法预测或可靠地“击败”该级别以上的其他应用程序(取决于设备,安装顺序,重新启动等)。