假设我的应用程序是“A”,我使用应用程序“A”中的自定义意图启动应用程序“B”的活动。它工作得很好,正如我所希望的那样。我使用的代码是在应用程序“B”的清单中:
<activity
android:name=".mysecondAct"
android:label="@string/title_activity_second" >
<intent-filter>
<action android:name="com.example.intent.action.Dream" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
在应用程序“A”的活动中,我启动应用程序“B”,
Intent i =new Intent("com.example.intent.action.Dream");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
现在,如何指定应将意图发送到的特定包,以便只有该应用程序接收意图并启动活动?原因是,我有一个包列表,用户选择要调用哪个包。
使用 ComponentName 类,如下所示:
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example1", "com.example1.MyExampleActivity1"));
startActivity(intent);
请注意,第一个参数不是类的包名;它是应用程序的包名称——该应用程序的AndroidManifest.xml 中的manifest 元素的package 属性。
如果您知道要启动的活动的名称(而不是班级),那么您可以执行以下操作:
Class<?> claz = null;
if(StringClassname != null) {
try {
claz = Class.forName(StringClassname );
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
Intent intent = new Intent(this, claz);
startActivity(intent);
而且,如果您甚至不知道活动名称和相应的类,那么我猜它成为使用广播的候选者,即从您的 AppA 开始,您应该进行广播..并且在 AppB、AppC 等中有广播接收器以及相应的广播接收器过滤器..
编辑:鉴于您只知道包名称和意图操作名称,请尝试像这样创建您的意图:
Intent i = new Intent();
i.setAction("com.example.intent.action.Dream");
i.setPackage(packageName);
startActivity(i);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)