2015-06-04 9 views
5

Mein Service richtig auf meine erste Tätigkeit binded, aber wenn ich versuche, es zu einer zweiten Aktivität zu binden, es nicht Hier funktioniert der Code von onResume und auf Pause meiner ersten Tätigkeiteinen Dienst mehrere Aktivitäten Bindung

@Override 
protected void onResume() { 
    super.onResume(); 
    connection = new ServiceConnection() { 
     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      service = null; 
     } 
     @Override 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      shareInfos.this.service = (IService) service; 
     } 
    }; 
    bindService(new Intent(this, shareInfos.class), connection, 
      Context.BIND_AUTO_CREATE); 
} 
@Override 
protected void onPause() { 
    super.onPause(); 
    if (service != null) { 
     service = null; 
     unbindService(connection); 
    } 
} 

tat ich das gleiche zu meiner zweiten Aktivität, aber wenn ich versuche, den Service zu nutzen ist es immer null Hier ist der Code meiner zweiten Aktivität:

@Override 
protected void onResume() { 
    super.onResume(); 
    connection = new ServiceConnection() { 
     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      service = null; 
     } 
     @Override 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      shareInfos.this.service = (IService) service; 
     } 
    }; 
    bindService(new Intent(this, shareInfos.class), connection, 
      Context.BIND_AUTO_CREATE); 
} 
@Override 
protected void onPause() { 
    super.onPause(); 
    if (service != null) { 
     service = null; 
     unbindService(connection); 
    } 
} 

das ist der Code meines Dienstes ist:

public class ExampleService extends AbstractService { 
private static final String SERVICE_NAME = "ExampleService"; 
public ExampleService() { 
    super(SERVICE_NAME); 
} 
@Override 
public AbstractRegistration getRegistration() { 
    return new AbstractRegistration() { 
     @Override 
     public String getApplicationName() { 
      return getResources().getString(R.string.application_name); 
     } 
     @Override 
     public String getApplicationDescription() { 
      return getResources().getString(R.string.application_description); 
     } 
     @Override 
     public PendingIntent getApplicationSettings() { 
      return PendingIntent.getActivity(getApplicationContext(), 0, new Intent(getApplicationContext(), ExampleActivity.class), 0); 
     } 
     @Override 
     public boolean requiresStorage() { 
      return true; 
     } 
     @Override 
     public boolean requiresQueries() { 
      return true; 
     } 
     @Override 
     public boolean requiresRecognition() { 
      return true; 
     } 
    }; 
} 

}

Hier ist meine Manifest-Datei:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="eu.gambas.example.android" > 

<uses-sdk 
    android:minSdkVersion="10" 
    android:targetSdkVersion="15" /> 

<uses-permission android:name="eu.gambas.permission.ACCESS" /> 
<uses-permission 
    android:name="android.permission.WRITE_EXTERNAL_STORAGE" 
    android:maxSdkVersion="18" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission 
    android:name="android.permission.READ_EXTERNAL_STORAGE" 
    android:maxSdkVersion="18" /> 

<application 
    android:icon="@drawable/icon" 
    android:label="@string/application_name" > 
    <activity 
     android:name="com.example.egm.exampleandroid.ExampleActivity" 
     android:label="@string/application_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name="com.example.egm.exampleandroid.ResultActivity" /> 
    <activity android:name="com.example.egm.exampleandroid.shareInfos" /> 
    <activity android:name="com.example.egm.exampleandroid.testActivity" /> 
    <service 
     android:name="com.example.egm.exampleandroid.ExampleService" 
     android:exported="true" > 
     <intent-filter> 
      <action android:name="eu.gambas.action.start" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="eu.gambas.action.stop" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="eu.gambas.action.result" /> 
     </intent-filter> 
    </service> 
</application> 

Vielen Dank im Voraus für Ihre Hilfe!

+0

Mal sehen, dass manifest por favor zu bekommen. – ApolloSoftware

+0

Dienstleistungen über viele Aktivitäten wird unordentlich. Es gibt zwei Möglichkeiten, wie ich das machen könnte. Ich würde entweder Application-Klasse ableiten und einige benutzerdefinierte Arbeit tun. Der zweite Weg besteht darin, Ihre verschiedenen Aktivitäten in Fragmente umzuwandeln, damit der Service wesentlich besser funktioniert! – ApolloSoftware

+0

Ich habe meine Manifest-Datei zu meiner Frage hinzugefügt. Was die Verwendung von Fragmenten betrifft, wie bindet man sie an den Dienst? Vielen Dank! – sabrina2020

Antwort

4

Sie müssen das gleiche Objekt des Serviceaufrufs in beiden Aktivitäten verwenden. Der beste Weg, dies zu tun, ist, die Application-Klasse zu erweitern, in der Sie Code schreiben müssen, um den Dienst zu starten und zu stoppen. Dann können Sie von jeder Aktivität aus auf den Service zugreifen.

public class AppController extends Application { 

    private static AppController mInstance; 
    private ExampleService service; 
    public static synchronized AppController getInstance() { 
      return mInstance; 
    } 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 
    } 
    public void startService(){ 
    //start your service 

    } 
    public void stopService(){ 
    //stop service 
    } 
    public ExampleService getService(){ 
    } 
    } 

nun den Service von Aktivität

AppController.getInstance().getService(); 
+0

@Jlthin Können Sie das etwas mehr ausdrücken? Insbesondere, was sollte in die getService-Methode gehen? Wird startService in onCreate() aufgerufen? – Atticus29

+0

Ist es nicht eine sehr schlechte Methode, Referenzen auf Objekte in der Application-Klasse zu speichern? http://www.developerphil.com/dont-store-data-in-the-application-object/ – estoke

Verwandte Themen