启动自定义隐式意图

4

有两个活动在设备上分别安装了以下清单文件:

第一个应用程序的活动在其清单中有:

其中, package="com.example.tictactoe"

<intent-filter>
        <action android:name="com.example.tictactoe.YOYO" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/*" /> 
 </intent-filter>

第二个应用的活动在其清单中包含以下内容:- 其中,
package="com.example.project"
 <intent-filter>
        <action android:name="com.example.project.YOYO" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/*" /> 
 </intent-filter>

现在,我想使用以下代码从第三方应用程序启动其中一个活动:
i=new Intent();
i.setAction("YOYO");
i.putExtra("KEY","HII..i am from third app");
startActivity(i);

但是执行时出现错误:

03-11 08:12:30.496: E/AndroidRuntime(1744): FATAL EXCEPTION: main
03-11 08:12:30.496: E/AndroidRuntime(1744): android.content.ActivityNotFoundException:
                    No Activity found to handle Intent { act=ACTION_SEND (has extras) }

尝试创建一个意图对象:Intent i = new Intent("com.example.project.YOYO");//包括包名,然后启动它:startActivity(i); - Raghunandan
@Raghunandan 没有起作用... - Rahul Rastogi
@Squonk,实际上,我想生成一个隐式意图,然后希望上述提到的活动能够在选择后响应,因为它们将通过意图过滤器传递。 - Rahul Rastogi
Rvdk的答案应该有效。与Activity类一起使用该包。您之前只使用了类名。 - Raghunandan
你知道ACTION_SEND是"android.intent.action.SEND"。你使用这个常量,即那个长字符串。 - RvdK
显示剩余3条评论
3个回答

6
您需要提供完整的操作名称;通过在您的意图中调用 setType(),使用清单中使用的mimeType
清单:
<intent-filter>
     <action android:name="com.example.tictactoe.YOYO" />
     <category android:name="android.intent.category.DEFAULT" />
     <data android:mimeType="text/plain" /> 
</intent-filter>

Java :

Intent i=new Intent();
i.setAction("com.example.tictactoe.YOYO");
i.setType("text/plain");
i.putExtra("KEY","HI..i am from third app");
startActivity(i);

3

您需要提供完整的操作:

i=new Intent();
i.setAction("com.example.tictactoe.YOYO");
i.putExtra("KEY","HII..i am from third app");
startActivity(i);

或者(取决于您要启动的项目):
i.setAction("com.example.project.YOYO");

您可以直接在构造函数中提供操作来完成此操作。
i=new Intent("com.example.tictactoe.YOYO");
i.putExtra("KEY","HII..i am from third app");
startActivity(i);

此外,请注意数据的 mimeType 或阅读如何使用它。因为通过 putExtra 不起作用。


删除你的 XML 数据属性,然后再试一次。 - RvdK
谢谢你的帮助,但它还是无法正常工作... :p 请问您能否提供一个链接,其中一个应用程序会自动启动以响应从其他应用程序生成的隐式意图的资格认证? - Rahul Rastogi
我们需要添加默认类别以使隐式意图正常工作。 - RockandRoll

0

首先,您需要确保意图的名称是完全限定名称,并且包名称在意图过滤器和触发意图的活动中相同。在这种情况下:“YOYO”应该是“com.example.tictactoe.YOYO”。您还应该删除mime类型,因为您没有在setData()中包含数据,而是在此情况下使用bundle。因此,您应该为触发意图的活动设置:

触发意图的活动

i=new Intent();
i.setAction("com.example.tictactoe.YOYO");
i.putExtra("KEY","HII..i am from third app");
startActivity(i);

对于接收活动清单中的条目:您需要确保将类别设置为DEFAULT并删除数据类型标记。

活动接收意图

<intent-filter>
     <action android:name="com.example.tictactoe.YOYO" />
     <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接