2016-09-02 3 views
0

Ich habe die Hauptaktivität, die einen Dienst ausführen. In diesem Dienst initiiere ich einen BroadcastReceiver (Alarm).SendBroadcast() funktioniert nicht bei Empfang von Broadcast

Dann brauche ich briadcast von der onReceive Methode der Alarm Broadcst, aber funktioniert nicht. Aber wenn ich sendBroadcast() von einer anderen Methode in Alarm ausführen, perfekt funktionieren.

Siehe de-Code für mich erklären:

Aktivität (init-Service und erhalten broadcastReceiver)

private final BroadcastReceiver abcd = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      //Intent in = getIntent(); 
      //finish(); 
      Log.d("sdasd", "onReceive: BROADCAST RECIBIDO!!!"); 
     } 
    }; 

Dienst

alarm alarm = new alarm(); 
    public void onCreate() 
    { 
     super.onCreate(); 
    } 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{    
    alarm.setAlarm(this, tiempo); 

    return START_STICKY; 
} 

Alarm.class

@Override 
    public void onReceive(Context context, Intent intent) 
    { 

     context.sendBroadcast(new Intent("xyz")); 
     Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example 

    } 

    public void setAlarm(Context context, int tiempo) 
    { 
     Log.e("TAG", "setAlarm: "); 

     context.sendBroadcast(new Intent("xyz")); 

     AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     Intent i = new Intent(context, alarm.class); 
     PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), tiempo, pi); // Millisec * Second * Minute 

    } 

In alarm.class wird das sendBroadcast in serAlarm() ausgeführt, aber das sendBroadcast in onreceive, wird nicht ausgeführt. Und der Toast funktioniert perfekt.

Warum?

+0

Wo haben Sie diesen 'BroadcastReceiver' registriert? In dem Code, den Sie freigegeben haben, instanziieren Sie es, aber Sie registrieren es nicht – 0xDEADC0DE

+0

welche Aktionen ist Ihr 'abcd' abonniert für? Zeige den Code, wo du 'abcd' Empfänger registrierst –

+0

Ich registriere den abc reciver in onCreate of activity // registerReceiver (abcd, neuer IntentFilter ("xyz")); Reciver Arbeit gut, aber nicht in onReceive anderer Broadcast – WIngenia

Antwort

0

Ich denke, Sie müssen BroadcastReceiver in Service.class registrieren.

Sie können BroadcastReceiver auf 2 Arten registrieren;

  1. AndroidManifest.xml verwenden

    <receiver android:name=".TestReceiver"> 
        <intent-filter> 
         <action android:name="xyz"/> 
        </intent-filter> 
    </receiver> 
    
  2. Sourcecode:

    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction("xyz"); 
    registerReceiver(abcd, intentFilter); 
    
    private final BroadcastReceiver abcd = new BroadcastReceiver() { 
        @Override 
        public void onReceive(Context context, Intent intent) { 
         //Intent in = getIntent(); 
         //finish(); 
         Log.d("sdasd", "onReceive: BROADCAST RECIBIDO!!!"); 
        } 
        }; 
    

======

".TestReceiver" Beispiel: Es ist Java Klassendatei

public class TestReceiver extends BroadcastReceiver{ 

@Override 
public void onReceive(Context context, Intent intent) { 

}} 
+0

Was muss ich für TestReceiver ändern? Alarm? – WIngenia

+0

Wenn Alarm.class BroadcastReceiver ist, können Sie TestReceiver in Alarm ändern – amuyu

+0

I versucht dies, aber es funktioniert nicht – WIngenia

Verwandte Themen