2015-02-25 13 views
6

In meiner Anwendung versuche ich Daten von meinem MainActivity.class an einen Dienst mit der Bezeichnung bgservice.class zu senden. Dies ist mein Code ein:Android - So senden Sie Daten von Aktivität zu Service?

MainActivity.class:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Intent serviceIntent = new Intent(bgservice.class.getName()); 
    serviceIntent.putExtra("UserID", "123456"); 
    this.startService(serviceIntent); 
} 

bgservice.class:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    String userID = intent.getStringExtra("userID"); 
    System.out.println(userID); 
    Toast.makeText(this,userID, Toast.LENGTH_LONG).show(); 
    return START_STICKY; 

} 

aber ich bin nicht die Daten in der Serviceklasse zu bekommen. dies sind die folgenden Fehler erhalte ich:

02-25 09: 05: 41,166: E/Android Runtime (2633):

java.lang.RuntimeException: Kann Aktivität
ComponentInfo {com starten. microapple.googleplace/com.microapple.googleplace. MainActivity}: java.lang.IllegalArgumentException: Service Intent muss explizit sein: Intent {act = com.microapple.googleplace.bgservice (hat Extras)}

AndroidManifest.xml:

 ... 
    <application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    <activity 
     android:name=".MainActivity" 
     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:enabled="true" android:name=".bgservice" /> 
</application> 
.... 
+0

Haben Sie den Dienst in Ihrem Manifest hinzugefügt? –

+0

ya ich @RandykaYudhistira hinzugefügt –

+0

@ Balau1: haben Sie 'com.microapple.googleplace.bgservice' Aktion in Manifest hinzugefügt? –

Antwort

3

hier:

Intent serviceIntent = new Intent(bgservice.class.getName()); 

Passing String Intent Konstruktor für Intent Erstellung Dienst zu starten. Intent Konstruktor verwendet String als Aktionsname, den wir in AndroidManifest.xml hinzugefügt haben.

<service android:enabled="true" android:name=".bgservice"> 
<intent-filter > 
     <action android:name="com.microapple.googleplace.bgservice" /> 
    </intent-filter> 
</service> 

Jetzt com.microapple.googleplace.bgservice als Aktionsname Intent erstellen verwenden:

 Intent serviceIntent = new Intent("com.microapple.googleplace.bgservice"); 
     serviceIntent.putExtra("UserID", "123456"); 
     this.startService(serviceIntent); 

ODER

Verwenden Intent constrictor, die Context als ersten Parameter und Komponentennamen nimmt, die wir als zweite gestartet werden soll Parameter:

Intent serviceIntent = new Intent(this,bgservice.class); 
    serviceIntent.putExtra("UserID", "123456"); 
    this.startService(serviceIntent); 

Und auch gleiche Schlüssel verwendet werden, die zur Zeit Wert mit UserID Schlüsseln Hinzufügen von Daten in Intent mit hinzufügen, aber versuchen userID Schlüssel

+0

@prosper k Ich habe dies versucht, aber immer den gleichen Fehler –

+0

@ Balau1: Welchen Weg haben Sie versucht?Bitte zeigen Sie den aktualisierten Code –

+0

@ Balau1: versuchen Sie es mit 'Intent serviceIntent = neue Absicht (this, bgservice.class);' –

2
Intent serviceIntent = new Intent(YourActivity.this, bgservice.class); 
     serviceIntent.putExtra("UserID", "123456"); 
     this.startService(serviceIntent); 

Und in Ihrem Dienst zu bekommen Wert verwenden,

public int onStartCommand(Intent intent, int flags, int startId) { 

    String userID = intent.getStringExtra("UserID"); 

    //do something 

    return START_STICKY; 

} 

Diese Arbeit muss.

+0

Was kann ich tun, wenn ich die userID-Variable in der onCreate() - Methode des Service verwenden möchte? Entschuldigung für das Kommentieren der Antwort von 2015. – PeMaCN

+0

Sie können diese Variable in onCreate() erhalten als, Intent intent = getIntent(); ',' if (intent! = Null && intent.hasExtra ("userID")) {String userID = intent.getExtra ("userID")} – Apurva

+0

getIntent() funktioniert nicht in Diensten wie kann ich parcelable Daten senden dann – SAVVY

Verwandte Themen