我的自定义意图不起作用。好像很好看

时间:2015-02-20 08:21:07

标签: android android-intent intentfilter

我试图让一个活动通过意图和意图过滤器来启动另一个活动。这就是我所拥有的。

在发布活动中:

 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>

我哪里错了?我犯了一个简单的错误吗?

我花了最后几个小时拖网堆栈溢出,但是只发现了类似的问题,答案没有解决我的问题或不适用。

1 个答案:

答案 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常量仅仅是一种便利。额外的键可以是你想要的任何东西,只要它在两个地方都是一样的。