使用隐式意图启动其他应用程序的服务组件

时间:2015-06-17 04:42:59

标签: android

是否可以使用隐式意图启动其他应用程序的服务组件? 例如,如果我想触发其意图过滤器收到" com.example.otherService"的其他应用程序服务,

Intent p = new Intent("com.example.otherService");
p.putExtra("lat", temp);
p.addCategory(Intent.CATEGORY_LAUNCHER);
p.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startService(p);

但它不起作用。请帮帮我。

2 个答案:

答案 0 :(得分:0)

您可以使用隐式意图来调用其他应用的服务。 确保其他应用程序正在公开意图并检查其他应用程序是否支持它。 用它来检查是否存在这样的缩进。

// This snippet can obviously be wrapped in a method call for easy reuse

// Get the package manager
PackageManager packageManager = getPackageManager();
// Get activities that can handle the intent
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent,  0);
// Check if 1 or more were returned
boolean isIntentSafe = activities.size() > 0;

if (isIntentSafe) {
startActivity(intent);
}

有关详细信息,请参阅链接http://codetheory.in/android-intents/

答案 1 :(得分:0)

如果您知道确切的包名称并且该服务在服务声明中具有android:exported="true"属性,则可以启动其他应用程序的服务。

Intent intent=new Intent();
intent.setComponent(new ComponentName("com.xxx.yyy","com.xxx.yyy.SampleService"));
startService(intent);

使用隐含意图

Intent intent=new Intent("ACTION_TO_START_SERVICE");
intent.setPackage("com.xxx.yyy");
startService(intent);