2010-09-10 185 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,因爲它們的結構不同。我解決了開始另一個線程,檢查綁定是否完成。感謝您的回覆