2009-09-23 22 views
13

Ich habe Probleme beim Senden von Daten von Service zu Aktivität durch Benachrichtigung, ich klicke auf eine Benachrichtigung eine Aktivität wird aufgerufen, aber wenn ich einige Parameter durch Bundle hinzufügen bin ich nicht in der Lage, die Parameter zu erhalten das rief Absicht, ich bin durch den Link gegangen How to send parameters from a notification-click to an activity?Senden von Daten vom Dienst an Aktivität

Aber immer noch kein Glück.

Ist das gleiche Problem bei jemand anderem aufgetreten?

Vielen Dank im Voraus.

+0

Wie senden Sie Daten vom Dienst an die Aktivität? –

Antwort

18

Sie müssen auch die Manifest-Datei ändern. Hier

ist das Beispiel, das funktioniert:

Diese Variablen und Methoden Mitglieder der Service-Klasse sind:

public static final String MOVEMENT_UPDATE = "com.client.gaitlink.AccelerationService.action.MOVEMENT_UPDATE"; 
    public static final String ACCELERATION_X = "com.client.gaitlink.AccelerationService.ACCELERATION_X"; 
    public static final String ACCELERATION_Y = "com.client.gaitlink.AccelerationService.ACCELERATION_Y"; 
    public static final String ACCELERATION_Z = "com.client.gaitlink.AccelerationService.ACCELERATION_Z"; 

private void announceAccelerationChanges()//this method sends broadcast messages 
    { 
     Intent intent = new Intent(MOVEMENT_UPDATE); 
     intent.putExtra(ACCELERATION_X, accelerationX); 
     intent.putExtra(ACCELERATION_Y, accelerationY); 
     intent.putExtra(ACCELERATION_Z, accelerationZ); 

     sendBroadcast(intent); 
    } 

Und dies sind die Methoden von Haupttätigkeit:

Sie haben Empfänger registrieren in der OnResume-Methode:

@Override 
    public void onResume() 
    { 

     IntentFilter movementFilter; 
     movementFilter = new IntentFilter(AccelerationService.MOVEMENT_UPDATE); 
     accelerationReceiver = new AccelerationServiceReceiver(); 
     registerReceiver(accelerationReceiver, movementFilter); 


     startAccelerationService(); 

     super.onResume(); 
    } 

    private void startAccelerationService() 
    { 
     startService(new Intent(this, AccelerationService.class)); 
    } 

    public class AccelerationServiceReceiver extends BroadcastReceiver 
    { 
     @Override 
     public void onReceive(Context context, Intent intent)//this method receives broadcast messages. Be sure to modify AndroidManifest.xml file in order to enable message receiving 
     { 
      accelerationX = intent.getDoubleExtra(AccelerationService.ACCELERATION_X, 0); 
      accelerationY = intent.getDoubleExtra(AccelerationService.ACCELERATION_Y, 0); 
      accelerationZ = intent.getDoubleExtra(AccelerationService.ACCELERATION_Z, 0); 

      announceSession(); 

      updateGUI(); 
     } 
    } 

Dies ist t er Teil der Datei "AndroidManifest.xml", die zum Empfangen von Rundsendenachrichten festgelegt werden muss:

<activity android:name=".GaitLink" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 

       <action android:name="com.client.gaitlink.CommunicationService.action.ACTIVITY_STATUS_UPDATE" /> 

      </intent-filter> 
     </activity> 
+0

Ich habe versucht, aber es funktioniert nicht wie erwartet .. Ich habe Log-Anweisungen geschrieben, aber ist nicht angezeigt in onRecieve-Methode. Was falsch ich kann tun, ich mache das gleiche wie gesagt! – Sam97305421562

+0

Überträgt der Dienst die Nachricht? Wurde der BroadcastReceiver in der Aktivität gestartet und ausgeführt? Haben Sie den Intent-Filter in AndroidManifest.xml hinzugefügt? –

+0

Ich habe BroadcastReceiver in der Datei AndroidManifest.xml hinzugefügt, ja, der Dienst sendet die Broadcast-Funktion, wie kann ich bestätigen, dass der BroadcastReceiver gestartet wurde. – Sam97305421562

Verwandte Themen