Android BroadcastReceive未激发

Android BroadcastReceive未激发,android,sms,broadcastreceiver,Android,Sms,Broadcastreceiver,我正在尝试处理Android中的短信接收功能。 我在Stackoverflow和其他网站上阅读了很多相关主题,并尝试使用一个非常简单的类,该类只需在控制台上打印已收到的消息和消息,但我无法理解为什么它不起作用 我看到类似的问题在过去一直没有得到回答(见) 希望有人能找到我的代码哪里有问题 代码: package com.storassa.android.smsapp; 导入android.content.BroadcastReceiver; 导入android.content.Context;

我正在尝试处理Android中的短信接收功能。 我在Stackoverflow和其他网站上阅读了很多相关主题,并尝试使用一个非常简单的类,该类只需在控制台上打印已收到的消息和消息,但我无法理解为什么它不起作用

我看到类似的问题在过去一直没有得到回答(见)

希望有人能找到我的代码哪里有问题

代码:

package com.storassa.android.smsapp;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.os.Bundle;
导入android.telephony.sms消息;
公共类SmsReceiver扩展了BroadcastReceiver{
私有静态最终字符串SMS_RECEIVED=“android.provider.Telephony.SMS_RECEIVED”;
私有静态最终字符串TAG=“SMSBroadcastReceiver”;
@凌驾
公共void onReceive(上下文、意图){
System.out.println(“接收到的意图:+Intent.getAction());
if(intent.getAction().equals(SMS_已接收)){
Bundle=intent.getExtras();
if(bundle!=null){
Object[]pdus=(Object[])bundle.get(“pdus”);
最终SmsMessage[]消息=新SmsMessage[pdus.length];
对于(int i=0;i-1){
System.out.println(“收到的消息:+消息[0].getMessageBody());
}
}
}
}
}
并表明

<manifest package="com.storassa.android.smsapp"
    android:versionCode="1"
    android:versionName="1.0" xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-sdk android:minSdkVersion="6" android:targetSdkVersion="6"/>
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

    <application android:label="@string/app_name" android:permission="android.permission.RECEIVE_SMS">
        <receiver android:name="com.storassa.android.smsapp.SmsReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="999">
                <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
            </intent-filter>
        </receiver>

    </application>
</manifest>

我尝试了你的代码,它对我来说运行良好

您所指的帖子的setPriority设置为999有问题,但仍然没有收到广播

尝试将优先级设置为Integer.MAX_值,或者在xml中设置为2147483647

一些SMS应用程序将使用此Integer.MAX_值作为其优先级,从而“吃掉”所有接收到的消息

如果无法将setPriority设置为Integer.MAX_值或2147483647,请尝试卸载所有处理传入短信的应用程序,并查看短信是否通过你的应用程序

如果这有帮助的话,那么是已经安装的应用程序之一在使用短信

解决这个问题的一个办法是,始终首先安装应用程序。这样,您将始终是第一个接收SMS广播的应用程序


编辑:将优先级设置为Integer.MAX_值或2147483647是一个错误,可能不应使用。setPriority()方法仅表示优先级在-1000到1000之间。不过,我自己也在应用程序中使用它,但我只处理从特定号码收到的特定短信,所以我看不出有什么问题。

我尝试了你的代码,它对我来说运行良好

您所指的帖子的setPriority设置为999有问题,但仍然没有收到广播

尝试将优先级设置为Integer.MAX_值,或者在xml中设置为2147483647

一些SMS应用程序将使用此Integer.MAX_值作为其优先级,从而“吃掉”所有接收到的消息

如果无法将setPriority设置为Integer.MAX_值或2147483647,请尝试卸载所有处理传入短信的应用程序,并查看短信是否通过你的应用程序

如果这有帮助的话,那么是已经安装的应用程序之一在使用短信

解决这个问题的一个办法是,始终首先安装应用程序。这样,您将始终是第一个接收SMS广播的应用程序


编辑:将优先级设置为Integer.MAX_值或2147483647是一个错误,可能不应使用。setPriority()方法仅表示优先级在-1000到1000之间。但是我自己在应用程序中使用它,但我只处理从特定号码收到的特定短信,所以我看不出有任何问题。

如果您还安装了其他优先级高于当前一个应用程序的应用程序,则会发生这种情况,因此提高优先级它将开始工作,我也多次遇到此问题,在一个应用程序中,我的优先级为100,但它不工作,但当我将其更改为999时,它开始工作,
因此,请尝试设置不同的大无优先级,然后再次检查。

如果您还安装了其他优先级高于当前应用的应用程序,则会发生这种情况,因此请提高优先级,它将开始工作,我也多次遇到此问题,在一个应用程序中,我的优先级为100,但它不工作,但当我将其更改为999时,它开始工作,
所以,试着设置不同的大无优先级,然后再次检查。

这段代码对他有什么帮助?这与在AndroidManifest.xml文件中注册BroadcastReceiver完全相同。请解释代码,而不是简单地用代码回答问题。这个代码对他有什么帮助?这与在AndroidManifest.xml文件中注册BroadcastReceiver完全相同。请解释代码,而不是用代码回答问题。谢谢Darwind的建议。我尝试在没有任何结果的情况下使用Integer.MAX_值。我正在使用Android模拟器检查代码。现在我正在尝试一个目标,我会让你知道的。尝试一个真正的目标,它似乎不起作用,因为代码不会在我在第一个println上设置的断点处停止。顺便说一句,使用System.out.println,我应该在Eclipse的控制台窗口上看到打印的文本吗?我应该在手机上看到什么吗?你是如何向模拟器发送短信的?如果仿真器的名称类似于5554:[您为仿真器指定的名称],那么您应该从仿真器控件向5554发送短信。@sthor69-System.out.println将仅显示在logcat中。不,你不会在手机上看到任何东西。我使用“telnet localhost 5554”发送短信,然后使用命令“SMS send 1123 Sending a message”感谢Darwind的建议。我试着用整数
<manifest package="com.storassa.android.smsapp"
    android:versionCode="1"
    android:versionName="1.0" xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-sdk android:minSdkVersion="6" android:targetSdkVersion="6"/>
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

    <application android:label="@string/app_name" android:permission="android.permission.RECEIVE_SMS">
        <receiver android:name="com.storassa.android.smsapp.SmsReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="999">
                <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
            </intent-filter>
        </receiver>

    </application>
</manifest>
//In on resume and on pause of actvities register the receiver and also in manifest

    protected void onPause(){

        super.onPause();
    unregisterReceiver(SmsReceiver ); 

    }



        protected void onResume()
{


            super.onResume();

            registerReceiver(SmsReceiver , 
                new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

        }


    private BroadcastReceiver SmsReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

                        }


        };