Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Sms广播接收器未注册_Java_Android_Sms_Broadcastreceiver - Fatal编程技术网

Java Sms广播接收器未注册

Java Sms广播接收器未注册,java,android,sms,broadcastreceiver,Java,Android,Sms,Broadcastreceiver,可能重复: 我正在开发一个简单的应用程序来截取特定号码的短信。在这一点上,当onReceive方法被激发时,我所要做的就是举杯庆祝,但是我没有得到任何东西 显示 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.*****" android:version

可能重复:

我正在开发一个简单的应用程序来截取特定号码的短信。在这一点上,当onReceive方法被激发时,我所要做的就是举杯庆祝,但是我没有得到任何东西

显示

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.*****"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <uses-sdk android:minSdkVersion="8" />

   <application android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <receiver android:name=".Receiver">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>
    </application>
</manifest>

那听筒呢

public class Receiver extends BroadcastReceiver {

    private static final String SENDER = "****";
    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";

     @Override
     public void onReceive(Context context, Intent intent) {    
         Toast.makeText(context, "Received!", Toast.LENGTH_LONG).show();

         if (intent.getAction().equals(SMS_RECEIVED)) {
             Bundle bundle = intent.getExtras();
             if (bundle != null) {
                 Object[] pdus = (Object[])bundle.get("pdus");
                 final SmsMessage[] messages = new SmsMessage[pdus.length];
                 for (int i = 0; i < pdus.length; i++) {
                     messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                 }
                 if (messages.length > -1) {
                     Toast.makeText(context, "Received a message!", Toast.LENGTH_LONG).show();
                     //abortBroadcast();
                 }
             }
         }
    }


}
公共类接收器扩展了BroadcastReceiver{
私有静态最终字符串发送器=“**”;
私有静态最终字符串SMS_RECEIVED=“android.provider.Telephony.SMS_RECEIVED”;
@凌驾
public void onReceive(上下文、意图){
Toast.makeText(上下文,“Received!”,Toast.LENGTH_LONG.show();
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){
Toast.makeText(上下文,“收到消息!”,Toast.LENGTH_LONG.show();
//abortBroadcast();
}
}
}
}
}
更新1 创建活动并启动应用程序后,将注册接收者。我需要一种方法让接收者自动注册。应用程序没有活动,只有onReceive方法拦截消息。这可能吗?也许是完全出于使用引导的目的

更新2
解决了它使用一个接收器引导完成启动一个服务,其中注册了短信接收器。谢谢。

您的解决方案有缺陷。它将适用于Android 3.0及更高版本。对于Android 3.1,您必须有一个用户至少启动一次的活动,才能启用您的应用程序。

如果您已经过滤了intent.getAction().equals(SMS_RECEIVED),为什么要检查intent.getAction().equals(SMS_RECEIVED)?因为我正在尝试我能想到的一切,只是为了得到一些响应。您是否尝试在manifest中不过滤接收者。并对捕捉所有电话广播事件进行测试,例如:我解决了它。见更新二。我目前无法回答我自己的问题,所以我不得不把它包括在问题中。启动的意图启动它。Im在4.0.3上运行,并按照预期工作,启动服务,并且从未执行任何活动launched@r2DoesInc:尝试完全卸载应用程序,然后重新安装。我想你会发现你的
开机完成了
接收器不再工作了。那真是太痛苦了。你说得对。有办法解决这个问题吗?我正在使用的应用程序将预装在设备上。没有与之相关的活动,它所做的只是截获特定消息并对其作出反应。我想一定有办法解决这个问题?@r2DoesInc:“我正在开发的应用程序是预装在设备上的”——设备制造商可能有办法解决这个问题,尽管你在SDK级别没有。嗯。好的,谢谢你的意见,我会联系他们,看看他们能不能帮我解决这个问题。