Как да стартирате услуга от Handler

Имам основен въпрос за стартиране на услуга.

Имам услуга, която стартира нишка за анализиране на файл; след като това бъде направено, същото се комуникира обратно чрез изпращане на съобщение.

Сега, след получаване на това съобщение в манипулатор на услугата, искам да стартирам друга услуга.

Тъй като Handler няма контекста, как да стартирам друга услуга?

Единият вариант е да изпратите локално излъчване и да получите същото и да стартирате услугата, но има ли друг начин да го направите?


person Manju    schedule 12.07.2013    source източник


Отговори (3)


Просто направете персонализиран манипулатор, който се нуждае от контекст:

public class CustomHandler extends Handler {
    Context mContext;

    public CustomHandler(Context context) {
        mContext = context;
    }

    public void handleMessage(Message msg) {
        if(msg.what == ID_STARTSERVICE) {
             Intent i = new Intent...
             mContext.startService(i);
        }
    }
}

Но се уверете, че предавате ApplicationContext ( new CustomHandler(getApplicationContext() ) ), а не контекст на дейност.

person NitroG42    schedule 12.07.2013

Ще бъде нещо подобно

public int onStartCommand(Intent intent, int flags, int startId)
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.mainActivity);

    Message msg = new Message();
    msg.what = 0;
    mHandler.sendMessage(msg);
}


Handler mHandler = new Handler()
{
 public void handleMessage(android.os.Message msg) {

    if(msg.what==0) 
{
       StartService(new Intent(Myservice.this,    secondservice.class));
            finish();
 }          

    };
};
person Shakeeb Ayaz    schedule 12.07.2013

Можете да стартирате услуга от Handler, без да използвате препратка към Context по този начин:

Intent serviceIntent = new Intent();
serviceIntent.setAction("your.package.UpdaterServieName");
startService(serviceIntent);

Надявам се, че разбрах въпроса ви и този отговор може да ви бъде полезен.

Съжалявам за моя английски.

person Flavio Capaccio    schedule 12.07.2013