2010-09-10 188 views
1

我需要做一个活动(没有布局),在开始时检查服务是否正在运行。如果它是真的,则启动Activity2,如果它为false,则启动Activity1。 我试着用这个代码:Android活动检查服务启动另一个活动

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 

,但是当我检查,在onCreate方法,如果serviceConnect = NULL我收到一个某个时候NullPointerExcption!

我想也插入在一个异步任务的方法的onCreate操作:

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


    } 
} 

但我有同样的问题。有人知道我如何解决这个问题? 谢谢

回答

1

bindService()是异步的。您必须等到您的ServiceConnection之前拨打onServiceConnected(),然后才能知道该服务是否可以使用。

+0

感谢您的回复。我知道,但我不知道该如何等待 – zerocool87 2010-09-10 20:19:28

+0

@ zerocool87:将你的代码从'onCreate()'调用到'bindService()'后调用'onServiceConnected()'。在'onServiceConnected()'之前,您不会查看'serviceConnected'。坦率地说,我认为你需要一种解决问题的方法,可能会将Activity1和Activity2合并成一个单独的活动,所以你不必做出这个决定。 – CommonsWare 2010-09-10 21:27:49

1

@CommonsWare我不能合并Activity1和Activity2,因为它们的结构不同。我解决了开始另一个线程,检查绑定是否完成。感谢您的回复