2012-06-22 5 views
0

Я прочитал инструкции и примеры в SO-вопросах, но все еще не в состоянии реализовать простой BroadcastReceiver, он просто ничего не получает, может кто-то любезно предоставить некоторые советы по следующему коду?BroadcastReceiver не принимает

Тпх

Моя активность:

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

вы начинаете сервис с пустым намерением. Я могу предположить, что вы хотите запустить свой MyService, чтобы получить рабочий код. –

+0

Я так новичок в SO, я надеюсь, что теперь это поправится, я отметил ответы, где не хватает :) –

ответ

1

Вы уверены, что ваше обслуживание начато? Похоже, что вы просто создаете пустое намерение и вызываете startService().

Ваш радиоприемник выглядит правильно.

+0

hmmm, на самом деле, теперь я вижу, что вы правы, сервис не достигает onStartCommand, не уверен, почему он добрался туда раньше ... I см. в logcat: «Невозможно запустить службу Intent []: not found». почему это? почему недостаточно пустого намерения? У меня нет какого-либо конкретного запроса от службы - просто чтобы он начинал ... –

+0

ОК получил его, я вызвал startService не так. Я должен создать намерение следующим образом: Intent intent = new Intent (это, MyService.class); startService (намерение); сейчас он работает, спасибо! –

0

Необходимо, чтобы register your receiver in your AndroidManifest.xml. Пока вы этого не сделаете, ОС Android не сможет найти ваш BroadcastReceiver.

+1

Привет, Получатель был динамически объявлен в активности, поэтому нужно объявить его в манифесте. – iNan

+0

@iNan, хороший пункт. Я думаю, что я все равно перенес его в манифест, но это может быть потому, что у меня нет полной ментальной картины жизненного цикла здесь. Гарантируется ли действие, если его служба работает? – sblom

+0

Если активность активна, то активность может принимать трансляцию, android хочет, чтобы все динамически зарегистрированные трансляции были незарегистрированы при прекращении действия. – iNan

Смежные вопросы