2012-06-22 121 views
0

我已阅读做题的说明和示例,但仍无法实现一个简单的广播接收器,它根本没有收到任何东西,可有人请提供以下代码一些建议吗?广播接收器接收不到

TNX

我的活动:

public class Receiver1Activity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     IntentFilter filter = new IntentFilter(MyService.MY_ACTION); 
     registerReceiver(new MyReceiver(), filter); 
     Intent intent = new Intent(); 
     startService(intent); 
    } 
} 

我的接收器:

public class MyReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
     Log.i("MyReceiver", "onreceive");  
    } 
} 

我的服务,发送广播:

public class MyService extends Service { 

    public static final String MY_ACTION = "com.receiver1.myaction"; 
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Intent intent2 = new Intent(MY_ACTION); 
     sendBroadcast(intent2); 
     return START_NOT_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

} 

我的清单文件:

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

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

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".Receiver1Activity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <service android:name=".MyService"></service> 
</application> 

</manifest> 
+0

你开始用空intent..I服务可以假设你要开始你的MyService得到一个工作代码。 –

+0

我有点陌生,所以我希望现在这变得更好,我已经标出答案在那里失踪:) –

回答

1

你确定你的服务甚至入门?它看起来像只是创建一个空白的意图,并调用startService()。

你的广播接收器似乎是正确的。

+0

嗯,其实,我现在看到你是正确的,该服务没有达到onStartCommand,不知道为什么它早些时候到达...我请参阅logcat:“无法启动服务意图[]:未找到”。这是为什么?为什么不是空的Intent就够了?我没有任何来自该服务的特定请求 - 只是它应该开始... –

+0

没问题,我以错误的方式调用了startService。我应该创建这样的意图: Intent intent = new Intent(this,MyService.class); startService(intent); 现在它的作品,谢谢! –

0

您需要register your receiver in your AndroidManifest.xml。在你这样做之前,Android操作系统将无法找到你的BroadcastReceiver。

+1

你好,接收机已被动态的活动宣告所以需要声明它的表现。 – iNan

+0

@iNan,好点。我想我仍然会把它移到清单上,但这可能是因为我对这里的生命周期并没有一个完整的思路。如果他的服务正在运行,是否保证已经创建活动? – sblom

+0

如果活动处于活动状态,则活动可以接收广播,android要求所有动态注册的广播在活动终止时都是未注册的。 – iNan