我有以下情况: 当我启动我的应用程序时,会发生以下情况:
StartActivity
LoginActivity
并显示登录布局(用户名和密码)LoginActivity
,但我使用保存在共享首选项上的(加密)数据,而不再向用户请求凭据。StartActivity
现在在我的清单文件中,我有MainActivity
的以下IntentFilter:
<intent-filter android:label="Conio" >
<action android:name="android.intent.action.VIEW" />
<data android:scheme="myprotocol" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
一切都很好用“BUT”: 一切只有在我的应用程序已经打开时才有效:我的app被带到前面,onCreate方法被调用,并且使用getIntent.getData()我可以访问启动我的应用程序的URI。
大问题:
我需要的是:
StartActivity
开始
为了做到这一点,我做了以下尝试:
我将IntentFilter应用于新的Activity
,在此Activity的onCreate方法中我将以下代码
Intent intent = getPackageManager().getLaunchIntentForPackage("my.package.name");
if (intent != null) {
intent.setData(intent.getData());
intent.putExtra("test", "test");
startActivity(intent);
finish();
}
但是这里发生的事情是,当应用程序没有正常运行时,应用程序正确地从StartActivity启动,但是如果应用程序已经运行,MainActivity会被带到前面但我无法访问意图附加功能,实际上这个代码可以不起作用
@Override
protected void onResume() {
super.onResume();
//this code returns null
String test=getIntent.getStringExtra("test");
}
如何让所有这些工作?
答案 0 :(得分:0)
如果应用程序已在运行,MainActivity会被带到前面,但我无法访问意图附加内容:
要在Activity运行时获取Intent,请使用LocalBroadcastManager
发送新的Intent来运行Activity,而不是调用startActivity
方法。
或强>
启动LocalBroadcastManager
时,在{1}}中没有FLAG_ACTIVITY_SINGLE_TOP
添加android:launchMode="singleTask"
或在AndroidManifest.xml
中添加MainActivity
:
intent.setData(intent.getData());
intent.putExtra("test", "test");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
并覆盖onNewIntent
中的MainActivity
方法:
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//get data from intent
}