短信听众让一些申请人关闭

时间:2012-08-01 12:48:15

标签: java android sms broadcastreceiver

我正在创建一个SMS广播接收器。我也在手机中使用GoSMS。

问题是:如果我没有设置android:priority或设置小于2147483647的值(这是GoSms的优先级)

对于我的接收器,我无法收到消息。

当我设置android:priority ="2147483647"时,我的应用可以收到该消息但是,我的手机中的某些应用程序已被强行关闭:

08-01 17:52:47.775: E/AndroidRuntime(3501): FATAL EXCEPTION: main
08-01 17:52:47.775: E/AndroidRuntime(3501): java.lang.RuntimeException: Unable to start service com.android.exchange.SmsRelayService@414f47f8 with Intent { cmp=com.android.exchange/.SmsRelayService (has extras) }: java.lang.NullPointerException
08-01 17:52:47.775: E/AndroidRuntime(3501):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2388)
08-01 17:52:47.775: E/AndroidRuntime(3501):     at android.app.ActivityThread.access$1900(ActivityThread.java:127)
08-01 17:52:47.775: E/AndroidRuntime(3501):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1222)
08-01 17:52:47.775: E/AndroidRuntime(3501):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-01 17:52:47.775: E/AndroidRuntime(3501):     at android.os.Looper.loop(Looper.java:137)
08-01 17:52:47.775: E/AndroidRuntime(3501):     at android.app.ActivityThread.main(ActivityThread.java:4507)
08-01 17:52:47.775: E/AndroidRuntime(3501):     at java.lang.reflect.Method.invokeNative(Native Method)
08-01 17:52:47.775: E/AndroidRuntime(3501):     at java.lang.reflect.Method.invoke(Method.java:511)
08-01 17:52:47.775: E/AndroidRuntime(3501):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
08-01 17:52:47.775: E/AndroidRuntime(3501):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
08-01 17:52:47.775: E/AndroidRuntime(3501):     at dalvik.system.NativeStart.main(Native Method)
08-01 17:52:47.775: E/AndroidRuntime(3501): Caused by: java.lang.NullPointerException
08-01 17:52:47.775: E/AndroidRuntime(3501):     at android.provider.Telephony$Sms$Intents.getMessagesFromIntent(Telephony.java:888)
08-01 17:52:47.775: E/AndroidRuntime(3501):     at com.android.exchange.SmsRelayService.onStartCommand(SmsRelayService.java:69)
08-01 17:52:47.775: E/AndroidRuntime(3501):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2371)

这是我的代码

public class SmsListener extends BroadcastReceiver{
 @Override
    public void onReceive(Context context, Intent intent) {

        if(intent.getAction().equals(Constants.SMS_RECEIVED_ACTION)){
        // Do some thing
        }
}
}

<receiver android:name=".widget.SmsListener" >
            <intent-filter android:priority="2147483647">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

我在Galaxy S2,ICS中运行

请帮帮我

此致

1 个答案:

答案 0 :(得分:1)

如果您只是需要接收短信并且您不想中止短信广播,您可以通过更改GO短信专业版的应用程序设置,让其他应用程序接收广播。如果用户使用GO短信,您可以指示用户执行此操作。像这样:“打开短信,点击'菜单',然后点击'设置',点击'接收设置',然后取消选中'停用其他短信通知。”

但是如果您需要中止广播,请允许我说设置优先级等于“2147483647”并不适用于我。最重要的是,两个应用程序都收到广播,而短信实际上会收到。第一个应用安装的规则建议here(请参阅所选答案的评论),here也不适用于我。

然而,有人提出了一段代码here,显然你可以得到一个带有它的设备上运行的接收器列表,你最好调查一下。所以希望你可以警告一些可能会干扰你的接收器的用户,这样你就不会得到用户的“App not not work”评论的一星级排名。