我试图让一个活动通过意图和意图过滤器来启动另一个活动。这就是我所拥有的。
在发布活动中:
Intent i = new Intent();
i.setAction("com.test.apps.CATAPP");
i.addCategory("com.test.apps");
this.startActivityForResult(i,APP_REQUEST_CODE);
接收应用中的意图过滤器:
<intent-filter>
<action android:name="com.test.apps.CATAPP" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.test.apps" />
<data android:mimeType="text/plain"/>
</intent-filter>
这无效。但是,如果我以Wei Meng Lee的Android 4开发为例,它只有在存在URI和Intent.ACTION_VIEW时才有效。
启动应用中的代码:
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://google.com"));
i.setAction("com.test.apps.CATAPP");
i.addCategory("com.test.apps");
this.startActivityForResult(i,APP_REQUEST_CODE);
打算接收应用:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="com.test.apps.CATAPP" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.test.apps" />
<data android:scheme="http"/>
</intent-filter>
我哪里错了?我犯了一个简单的错误吗?
我花了最后几个小时拖网堆栈溢出,但是只发现了类似的问题,答案没有解决我的问题或不适用。
答案 0 :(得分:1)
在第一个示例中,您的Intent不会与Activity的IntentFilter匹配。您已在IntentFilter中指定了一个数据元素,但您没有在Intent上设置一个数据元素。您可以在Intent上设置MIME类型:
i.setType("text/plain");
或者从清单中的<data>
移除<intent-filter>
元素,具体取决于您的要求。
如果您只想传递一些简单的文本,请按上图所示设置Intent的类型,并附加一个String extra。
i.putExtra(Intent.EXTRA_TEXT, "Plain text.");
然后,在下一个Activity中检索文本:
String plainText = getIntent().getStringExtra(Intent.EXTRA_TEXT);
if(plainText != null)
...
请注意,Intent.EXTRA_TEXT
常量仅仅是一种便利。额外的键可以是你想要的任何东西,只要它在两个地方都是一样的。