2012-06-22 125 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