Je dois faire une activité (sans mise en page) qui, au démarrage, vérifie si un service est en cours d'exécution. si c'est vrai, il démarre Activity2, s'il est faux, il démarre Activity1. J'ai essayé avec ce code:Service de vérification d'activité Android pour démarrer une autre activité
public class FirstActivity extends Activity{
private final Intent serviceIntent = new Intent(ServiceConnected.class
.getName());
private ServiceConnected serviceConnected;
private final ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
serviceConnected = ServiceConnected.Stub.asInterface(service);
Log.e("Connessione al Servizio", "onServiceConnected");
Toast.makeText(FirstActivity.this, "Connessione con il Service Effettuata", Toast.LENGTH_SHORT).show();
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.e("Disconnessione dal servizio", "onServiceDisconnected");
Toast.makeText(FirstActivity.this, "Scollegamento effettuato", Toast.LENGTH_SHORT).show();
}
};
@Override
public void onCreate(Bundle savedInstanceState){
setContentView(R.layout.firstactivity);
super.onCreate(savedInstanceState);
bindRemoteService();
Log.e("Dopo Bind onCreate","FirstActivity");
if(serviceConnected!=null)
try {
boolean temp=serviceConnected.getConnected();
Log.e("ServiceConnected",Boolean.toString(temp));
if(temp==true){
Log.e("Salto alla seconda","FirstActivity");
step2();
}
else{
Log.e("Salto alla prima","FirstActivity");
step1();
}
} catch (RemoteException e) {
// TODO Auto-generated catch block
Log.e("Errore Step","FirstActivity");
}
}
public void bindRemoteService() {
if (serviceConnected == null) {
if(bindService(serviceIntent, serviceConnection,
Context.BIND_AUTO_CREATE)){
Log.e("Bind Effettuato", "bindRemoteService");
Toast.makeText(this, "Service Binded", Toast.LENGTH_SHORT).show();
}
}
}
private void step2(){
Intent intent;
intent=new Intent(getApplicationContext(), Activity2.class);
startActivity(intent);
}
private void step1(){
Intent intent;
intent=new Intent(getApplicationContext(), Activity1.class);
startActivity(intent);
}
enter code here
mais quand je vérifie, dans la méthode onCreate, si serviceConnect = null Je reçois parfois un NullPointerExcption!.
J'ai aussi essayé d'insérer l'opération dans la méthode onCreate dans un Async Tâche:
private class BackgroundWorker extends AsyncTask<Void,Integer, Void> {
@SuppressWarnings("unchecked")
@Override
protected void onPreExecute() {
Log.e("BackgroundWorker","onPreExecute");
super.onPreExecute();
}
@Override
protected Void doInBackground (Void... params) {
Log.e("Dentro Background Worker", "DOIN");
bindRemoteService();
publishProgress(1);
//publishProgress(2);
return null;
}
@SuppressWarnings("unchecked")
@Override
protected void onProgressUpdate (Integer... values) {
try{
do{
try {
if (serviceConnected!=null&&checked==true){
boolean temp=serviceConnected.getConnected();
if(temp==true){
Log.e("Salto alla seconda","FirstActivity");
Log.e("ServiceConnected",Boolean.toString(temp));
step2();
}
else if(temp==false){
Log.e("Salto alla prima","FirstActivity");
Log.e("ServiceConnected",Boolean.toString(temp));
step1();
}
}
} catch (RemoteException e) {
// TODO Auto-generated catch block
Log.e("Errore Step",e.toString());
}
}while(checked==false);
}catch(Exception e){Log.e("Errore do",e.toString());};
}
}
Mais j'ai le même problème. Quelqu'un sait comment je peux résoudre ce problème? Merci
Merci pour votre réponse. Je sais cela, mais je ne sais pas comment attendre – zerocool87
@ zerocool87: Vous déplacez tout votre code après votre appel à 'bindService()' depuis 'onCreate()' et dans 'onServiceConnected()'. Vous ne regardez pas 'serviceConnected' jusqu'à' onServiceConnected() '. Franchement, je pense que vous avez besoin d'une approche différente du problème, fusionnant probablement Activity1 et Activity2 en une seule activité, vous n'avez donc pas à prendre cette décision. – CommonsWare