2015-06-04 29 views
5

Il mio servizio è correttamente binded alla mia prima attività, ma quando cerco di associarlo a una seconda attività non funziona Ecco il codice di onResume e in pausa della mia prima attivitàvincolante un servizio a più attività

@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); 
    } 
} 

ho fatto lo stesso per la mia seconda attività, ma quando provo ad usare il servizio che è sempre nullo Ecco il codice della mia seconda attività:

@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); 
    } 
} 

Quello è il codice del mio servizio:

012.
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; 
     } 
    }; 
} 

}

Ecco il mio file manifesto:

<?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> 

Grazie in anticipo per il vostro aiuto!

+0

Vediamo che manifestano por favor. – ApolloSoftware

+0

I servizi di molte attività diventano disordinati. Ci sono due modi per affrontarlo. Avrei sottoclasse la classe Application e avrei fatto un po 'di lavoro personalizzato. Il secondo modo è convertire le tue attività multiple in frammenti, in questo modo renderà il servizio sostanzialmente migliore! – ApolloSoftware

+0

Ho aggiunto il mio file manifest alla mia domanda. Per quanto riguarda l'uso dei frammenti, come legarli al servizio? Grazie! – sabrina2020

risposta

4

È necessario utilizzare lo stesso oggetto della chiamata di servizio in entrambe le attività. Il modo migliore per farlo sarà estendere la classe Application dove devi scrivere il codice per avviare il servizio e per interrompere. Quindi puoi accedere al servizio da qualsiasi attività.

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(){ 
    } 
    } 

ora per ottenere il servizio dall'attività

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

@Jlthin potresti arricchirlo un po 'di più? In particolare, cosa dovrebbe andare nel metodo getService? StartService viene chiamato su onCreate()? – Atticus29

+0

Non è una pratica molto brutta salvare i riferimenti agli oggetti nella classe Application? http://www.developerphil.com/dont-store-data-in-the-application-object/ – estoke