Служба проверки активности Android для запуска другого действия - PullRequest
1 голос
/ 10 сентября 2010

Мне нужно выполнить действие (без макета), чтобы при запуске проверить, работает ли служба.если это правда, он запускает Activity2, если он ложный, он запускает Activity1.Я пытался с этим кодом:

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 в Async Task:

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


    }
}

Но у меня та же проблема.Кто-то знает, как я могу это исправить?Спасибо

Ответы [ 2 ]

1 голос
/ 12 сентября 2010

@ CommonsWare Я не могу объединить Activity1 и Activity2, потому что они структурированы по-разному.Я решил запустить еще один поток, который проверяет, выполнено ли связывание.Спасибо за ваш ответ

1 голос
/ 10 сентября 2010

bindService() является асинхронным. Вам нужно подождать, пока на вашем ServiceConnection не будет набрана onServiceConnected(), прежде чем вы узнаете, готов ли сервис к использованию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...