gpt4 book ai didi

Android Home Activity 启动子 Activity

转载 作者:太空狗 更新时间:2023-10-29 15:39:40 26 4
gpt4 key购买 nike

我是 Android 编程的新手。我在工作中接到了一项任务,我需要创建一个自定义主页 Activity 启动器。我做了一些研究,在 Android 开发者网站 (home sample) 上找到了这个例子。这是我原型(prototype)的开始。

自定义主页 Activity 将需要要求用户进行身份验证(输入一些简单的凭据)。我的想法是从 Home Activity 启动一个子 Activity ,并将 Intent 中的结果传回给 Home Activity 。我需要能够捕获有关这些凭据的信息,并且该信息将被传回 Home Activity 。但是,尝试此操作时遇到问题。我在 LogCat 中收到一条日志,内容如下:“Activity 作为新任务启动,因此取消 Activity 结果。”

我知道 startActivityForResult 方法,但它似乎对我不起作用。这是我从主页 Activity 启动 Activity 的地方:

@Override
protected void onResume() {
super.onResume();
bindRecents();

Intent iii = new Intent(this, Login.class);
startActivityForResult(iii, STATIC_LOGIN_INTEGER_VALUE);
}

当该代码执行时,我从 ActivityManager 标记中获取上述日志。

我的登录 Activity 有一个按钮,用户在输入凭据后将点击该按钮。如果凭据良好,那么我会尝试执行以下操作(我输入了多个日志以便我可以尝试弄清楚发生了什么):

public void onClick(View src) {
// check for authentic credentials
if(IsValid())
{
Intent loginAuth = new Intent("Login");
loginAuth.putExtra("userRole", userRole);

Log.d("LOGIN", "Setting result...");
if (getParent() == null) {
Log.d("LOGIN", "Parent was null");
setResult(Activity.RESULT_OK, loginAuth);
}
else {
Log.d("LOGIN", "setting result on parent...");
getParent().setResult(Activity.RESULT_OK, loginAuth);
}

Log.d("LOGIN", "Finishing the activity");
finish();
}
}

我在 list 文件中将这些 Activity 定义如下:

    <activity android:name="Home"
android:theme="@style/Theme"
android:launchMode="singleInstance"
android:stateNotNeeded="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

<activity android:name="Login"
android:label="Login"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</activity>

我在 Login Activity 中使用 intent 过滤器。我最初将其设置为空。我也有 launchMode 空白(我相信默认为标准)。我尝试了其中的大部分选项,但似乎没有什么能改变这样一个事实,即 ActivityManager 似乎想要将 Activity 作为新任务启动并想要忽略返回的 Intent (我需要)。

最佳答案

问题是您使用 launchMode="singleInstance"声明了您的 Activity ,因此 Android 在启动登录 Activity 时创建了一个新任务(即一个新进程)。不同任务中的 Activity 不能相互返回结果。来自 Activity.startActivityForResult() 文档:

For example, if the activity you are launching uses the singleTask launch mode, it will not run in your task and thus you will immediately receive a cancel result.

singleInstance 类似于 singleTask 但限制更多。尝试从您的 list 中删除 launchMode 属性,以便登录 Activity 将在同一任务中启动,然后在您需要在单独的任务中启动不同的 Activity 时使用 FLAG_ACTIVITY_NEW_TASK。

巴里

关于Android Home Activity 启动子 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6428070/

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