gpt4 book ai didi

android - 接收连续的 SEND Intent 将应用程序带回前台,但不会更新 Intent

转载 作者:行者123 更新时间:2023-11-29 20:51:46 30 4
gpt4 key购买 nike

在我正在进行的项目中,我遇到了接收外部 Intent (即非启动器 Intent )的问题。我有一个 Activity 可以使用普通的 LAUNCHER intent 启动,但它也响应来自其他应用程序的 SEND intents,例如在 YouTube 应用程序中分享视频链接。我第一次从其他应用程序共享链接时,我的 Activity 已创建,我可以使用 getIntent() 获取 Intent 的详细信息,即EXTRA_TEXT。如果我关闭我的 Activity 并使用另一个链接重试,那也能正常工作。但是,如果我不关闭我的 Activity,通过“主页”或“最近启动的应用”返回到其他应用,并分享另一个链接,我的 Activity 就会出现回到前台,但 getIntent() 导致 intent,而不是我认为会触发我的 Activity 重启的新 intent >.

我创建了一个 MCVE 来说明这个问题:

Activity :

public class MainActivity extends ActionBarActivity {
private TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d("MainActivity", "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.intent_text);
}

@Override
protected void onResume() {
Log.d("MainActivity", "onResume");
super.onResume();
Intent intent = getIntent();
String text;
if (intent.hasExtra(Intent.EXTRA_TEXT)) {
text = intent.getExtras().getString(Intent.EXTRA_TEXT);
} else {
text = "nothing";
}
tv.setText(text);
}
}

list :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.intenttest"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="IntentTest"
android:theme="@style/Theme.AppCompat" >
<activity
android:name=".MainActivity"
android:label="IntentTest" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/*" />
</intent-filter>
</activity>
</application>

</manifest>

为了完整起见,简单的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.intenttest.MainActivity" >

<TextView
android:id="@+id/intent_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</RelativeLayout>
  1. 启动应用程序, TextView 打印“无”
  2. 启动 YouTube 应用,共享链接,选择此应用,应用重新启动, TextView 显示 YouTube 共享的任何文本
  3. 按主页
  4. 返回 YouTube 应用,分享不同的链接,选择此应用,应用重新启动, TextView 显示与之前相同的旧文本
  5. 从“最近使用的应用程序”中按返回键或滑动应用程序
  6. 返回 YouTube 应用,共享另一个链接,选择此应用,应用重新启动(重新创建), TextView 显示 YouTube 刚刚共享的新文本

我觉得我在这里缺少一些基本的东西。如何让我的应用程序响应新的 Intent

最佳答案

添加android:launchMode="singleTop"<activity>说明。

当 Activity 启动时(如果它尚未运行),Android 将调用 onCreate()你可以获得Intent调用getIntent() (就像您已经在做的那样)。

如果在您的应用已在运行时启动 Activity,Android 会将其带到前台并调用 onNewIntent()传入新的 Intent .您应该覆盖此方法并对传递的 Intent 做一些事情(将其保存在成员变量中或从中提取您想要的内容或其他内容)。之后安卓会调用onResume() .

调用 getIntent()将始终返回 Intent最初用于启动 Activity。

关于android - 接收连续的 SEND Intent 将应用程序带回前台,但不会更新 Intent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28969169/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com