Vij*_*jai 6 android android-manifest android-intent
假设我的应用程序是"A",我使用应用程序"A"中的自定义意图启动应用程序"B"的活动.它可以正常工作,因为我想要它.我使用的代码是app"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>
Run Code Online (Sandbox Code Playgroud)
在应用程序"A"的活动中,我启动应用程序"B",
Intent i =new Intent("com.example.intent.action.Dream");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
现在,如何指定应将意图发送到的特定包,以便只有该应用程序接收意图并启动活动?原因是,我有一个包列表,用户选择要调用哪一个.
使用如下所示的ComponentName类:
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example1", "com.example1.MyExampleActivity1"));
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
请注意,第一个参数不是类的包名称; 它是应用程序的包名称---该应用程序的AndroidManifest.xml中清单元素的包属性.
如果您知道要启动的活动的名称(而不是类),那么您可以执行以下操作:
Class<?> claz = null;
if(StringClassname != null) {
try {
claz = Class.forName(StringClassname );
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
Intent intent = new Intent(this, claz);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
并且,如果你甚至不知道活动名称和相应的类,那么我想它成为使用广播的候选者,即从你的AppA,你应该广播..并在AppB,AppC等广播接收器与相应的过滤器..
编辑:鉴于您只知道包名称和意图操作名称,请尝试创建您的意图:
Intent i = new Intent();
i.setAction("com.example.intent.action.Dream");
i.setPackage(packageName);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
所以修复非常简单。我只是将包设置为我的意图应该传递给哪个包。代码是:
Intent i =new Intent("com.example.intent.action.Dream");
i.setPackage("com.package.to.start"); //The package name of the app to which intent is to be sent
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4699 次 |
| 最近记录: |