我对 Android 编程比较陌生。我在工作中被分配了一项任务,我需要创建一个自定义主页活动启动器。我做了一些研究,并在 Android 开发者网站(主页示例)上找到了该示例。这是我原型的开始。
自定义 Home 活动将需要用户进行身份验证(输入一些简单的凭据)。我的想法是从 Home 活动启动一个子活动,并将意图中的结果传递回 Home 活动。我需要能够捕获有关这些凭据的信息,并且该信息将被传递回 Home 活动。但是,我在尝试这个时遇到了问题。我在 LogCat 中收到一条日志,内容如下:“活动正在作为新任务启动,因此取消活动结果。”
我知道 startActivityForResult 方法,但这似乎对我不起作用。这是我从 Home 活动启动活动的地方:
@Override
protected void onResume() {
super.onResume();
bindRecents();
Intent iii = new Intent(this, Login.class);
startActivityForResult(iii, STATIC_LOGIN_INTEGER_VALUE);
}
当该代码执行时,我从 ActivityManager 标记中获取上述日志。
我的登录活动有一个按钮,用户输入凭据后将点击该按钮。如果凭据很好,那么我尝试执行以下操作(我输入了几个日志,以便我可以尝试找出发生了什么):
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();
}
}
我在清单文件中将这些活动定义如下:
<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>
我正在使用登录活动的意图过滤器。我最初将其设置为空。我也有 launchMode 空白(我相信默认为标准)。我已经使用了这些选项中的大多数,但似乎没有任何改变 ActivityManager 似乎想要将活动作为新任务启动并想要忽略返回的意图(我需要)的事实。