Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android:当多个实现响应相同的意图时,操作系统如何选择组件实现?_Android_Android Intent_Intentfilter - Fatal编程技术网

android:当多个实现响应相同的意图时,操作系统如何选择组件实现?

android:当多个实现响应相同的意图时,操作系统如何选择组件实现?,android,android-intent,intentfilter,Android,Android Intent,Intentfilter,我有一个免费和高级版本的同一个应用程序(几乎相同的代码,相同的类和“if”在这里和那里,不同的包在清单中,相同的进程名在清单中)。主活动使用隐式意图调用服务来执行某些内容 当我在手机上安装这两个应用程序时,结果表明,高级活动实际上有时启动“免费”服务,有时启动“高级”服务。 我一直在玩分类和packagemanager,但它似乎太复杂了 问题: Android如何处理响应同一意图的多个组件 你会如何做我正在尝试做的事情:我在多个应用程序中拥有相同的服务,我只希望从所有应用程序调用一个实例 我想你

我有一个免费和高级版本的同一个应用程序(几乎相同的代码,相同的类和“if”在这里和那里,不同的包在清单中,相同的进程名在清单中)。主活动使用隐式意图调用服务来执行某些内容

当我在手机上安装这两个应用程序时,结果表明,高级活动实际上有时启动“免费”服务,有时启动“高级”服务。 我一直在玩分类和packagemanager,但它似乎太复杂了

问题:

  • Android如何处理响应同一意图的多个组件
  • 你会如何做我正在尝试做的事情:我在多个应用程序中拥有相同的服务,我只希望从所有应用程序调用一个实例

  • 我想你可以在意图中添加一个额外的布尔isPremium。当然,你还需要一些“如果”

    活动:

    //send broadcast
    Intent serviceStarted = new Intent(Actions.ACTION_START_SERVICE);
    serviceStarted.putExtra(Extras.EXTRA_PREMIUM_VERSION, PREMIUM_VERSION);
    sendBroadcast(serviceStarted);
    
    接收人:

    if (!intent.getExtras().getBoolean(Extras.EXTRA_PREMIUM_VERSION)) {
        Log.v(TAG, " - ignoring wrong version");
        return;
    }
    

    我想你可以在意图中添加一个额外的布尔isPremium。当然,你还需要一些“如果”

    活动:

    //send broadcast
    Intent serviceStarted = new Intent(Actions.ACTION_START_SERVICE);
    serviceStarted.putExtra(Extras.EXTRA_PREMIUM_VERSION, PREMIUM_VERSION);
    sendBroadcast(serviceStarted);
    
    接收人:

    if (!intent.getExtras().getBoolean(Extras.EXTRA_PREMIUM_VERSION)) {
        Log.v(TAG, " - ignoring wrong version");
        return;
    }
    

    我相信Android只会将这个意图转发给一个接收者,所以如果它不是正确的接收者,那么另一个接收者将永远不会收到它。我注意到,如果多个活动响应相同的意图,则会显示一个弹出窗口,但我想知道有关服务的情况。我取决于您如何称呼它-startActivity和startService针对单个活动/服务,可能会触发弹出窗口以选择启动什么。但是使用sendBroadcast会触发所有的接收者,因为接收者会传递它。我相信Android只会将这个意图转发给一个接收者,所以如果它不是正确的接收者,另一个将永远不会接收到它。我注意到,如果多个活动响应相同的意图,则会显示一个弹出窗口,但我想知道有关服务的情况。我取决于您如何称呼它-startActivity和startService针对单个活动/服务,可能会触发弹出窗口以选择启动什么。但是使用sendBroadcast将触发所有接收器,只要接收器将其传递。