使用相同的URL并在一个应用程序中捕获意图

时间:2016-07-01 10:43:41

标签: android android-intent

我正在制作需要抓住网站共享网站网址的Android应用。例如,您正在运行chrome,单击共享,选择您的应用程序,它会打开并管理该链接。我写了以下代码:

清单:

<activity
    android:name=".LoginActivity"
    android:label="@string/title_activity_login">
    <intent-filter android:label="Hello">
       <action android:name="android.intent.action.SEND" />
       <data android:mimeType="*/*" />
       <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

的活动:

Intent intent = getIntent();
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
String action = intent.getAction();
String type = intent.getType();

if (Intent.ACTION_SEND.equals(action) && type.equals("text/plain")) {
   // ..do something
}

但发生了两个问题:

  1. 意图只被抓了一次。当我分享网站时,它的效果很好,但当我回到浏览器并希望再次共享(相同的网址或其他内容)时,意图不会被抓住。
  2. 如果我手动启动应用程序,然后打开网站并分享一些链接,应用程序的另一个实例启动(甚至不是应用程序,但此特定活动)。
  3. 有人建议如何解决这些问题吗? 任何帮助将非常感激。

1 个答案:

答案 0 :(得分:0)

老实说,我已经解决了第一个问题,说实话,这是一个非常愚蠢的错误。我在onCreate中放入了带getIntent的代码片段,应该在onResume中。无论如何,当我手动启动第一个应用程序时,仍会创建应用程序的新实例:(

编辑:放

      android:launchMode="singleTask">
清单中的

和从onResume移动代码到

 @Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    catchIntent(intent);
}

解决了问题。您必须记住在onCreate中再次进行调用,以便可以触发第一次捕获。添加

非常好
  intent.setFlags(intent.FLAG_ACTIVITY_SINGLE_TOP);