使用多个广播接收器的服务

时间:2014-09-11 17:42:01

标签: android service broadcastreceiver

我有一个在后台运行的服务和一个广播接收器,可以在安装应用程序时提醒我。我可以在同一服务中注册另一个在卸载应用程序时通知我的广播接收器吗?

public class Service extends android.app.Service {
    BroadcastReceiver receiver;
    ...

public class InstallationReceiver extends BroadcastReceiver{

        public InstallationReceiver() {
            // TODO Auto-generated constructor stub
        }

        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "DS notify APP INSTALLED").show();

        }
}

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onStart(Intent intent, int startId) {
    //Set the intentFilter and register the receiver
    counter++;
    super.onStart(intent, startId);
    Toast ts = Toast.makeText(this, "Ds Started"+counter+" times" , Toast.LENGTH_LONG);
    ts.setGravity(Gravity.CENTER, 0,0);
    ts.show();

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
    intentFilter.addAction(Intent.ACTION_PACKAGE_INSTALL);
    intentFilter.addDataScheme("package");
    receiver = new InstallationReceiver();
    registerReceiver(receiver, intentFilter);


}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    Toast ts = Toast.makeText(this, "Ds stopped" , Toast.LENGTH_LONG);
    ts.setGravity(Gravity.CENTER, 0,0);
    ts.show();
}

编辑:添加了我的工作代码的代码,只有一个接收器用于安装事件。它嵌套在服务类中,因此我不需要在清单中将其声明为接收器。我的问题是:我能否以与安装接收器相同的方式嵌套另一个接收器(用于卸载事件的I.E.接收器)?

2 个答案:

答案 0 :(得分:0)

即使只使用原始广播接收器,也应该可以进入清单并向接收器意图过滤器添加必要的意图。如果您不想编写逻辑来区分两者,那么注册另一个接收器来实现这一点是可以接受的,如果您计划添加不同的功能,那么长期可能是更好的情况。

我不知道自己有什么特定的意图来监听卸载,但是如果你找到了安装意图,它应该是类似的。

答案 1 :(得分:0)

是的,你可以在这方面做很多事情,只需听一下注册以获得PACKAGE_REMOVED意图

请参阅:http://developer.android.com/guide/faq/framework.html#7

相关问题