针对特定包的自定义意图

时间:2015-01-11 06:02:45

标签: android android-intent android-manifest

说我的应用程序是" A",我开始了应用程序的活动" B"使用应用程序中的自定义意图" A"。它可以正常工作,因为我想要它。我使用的代码是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>

在app&#34; A&#34;的活动中,我开始使用应用程序&#34; B&#34;用,

Intent i =new Intent("com.example.intent.action.Dream");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

现在,如何指定应将意图发送到的特定包,以便只有该应用程序接收意图并启动活动?原因是,我有一个包列表,用户选择要调用哪个包。

2 个答案:

答案 0 :(得分:6)

使用如下所示的ComponentName类:

Intent intent = new Intent();

intent.setComponent(new ComponentName("com.example1", "com.example1.MyExampleActivity1"));

startActivity(intent);

请注意,第一个参数不是类的包名;它是应用程序的包名称---该应用程序的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);

而且,如果你甚至不知道活动名称和相应的课程,那么我想它会成为使用广播的候选人,即从你的AppA,你应该广播..并在AppB中有广播接收器,AppC等与相应的过滤器..

编辑:鉴于您只知道包名称和意图操作名称,请尝试创建这样的意图:

Intent i = new Intent();

i.setAction("com.example.intent.action.Dream");

i.setPackage(packageName);

startActivity(i);

答案 1 :(得分:4)

所以修复非常简单。我只是将包设置为意图应该传递给我的意图。代码是:

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);