Ste*_*eny 2 android subactivity android-activity android-launcher android-homebutton
我对Android编程比较陌生.我在工作中得到了一项任务,我需要创建一个自定义主页活动启动器.我做了一些研究,并在Android开发者网站(主页样本)上找到了这个例子.这是我原型的开始.
自定义Home活动需要用户进行身份验证(输入一些简单的凭据).我的想法是从Home活动启动一个子活动,并将意图中的结果传回Home活动.我需要能够捕获有关这些凭据的信息,并且该信息将被传递回Home活动.但是,尝试这个时我遇到了问题.我在LogCat中登录了以下内容:"活动正在作为新任务启动,因此取消了活动结果."
我知道startActivityForResult方法,但这对我来说似乎没有用.这是我从家庭活动中启动活动的地方:
@Override
protected void onResume() {
super.onResume();
bindRecents();
Intent iii = new Intent(this, Login.class);
startActivityForResult(iii, STATIC_LOGIN_INTEGER_VALUE);
}
Run Code Online (Sandbox Code Playgroud)
当代码执行时,我从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();
}
}
Run Code Online (Sandbox Code Playgroud)
我在清单文件中将这些活动定义如下:
<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>
Run Code Online (Sandbox Code Playgroud)
我正在使用Login活动上的intent过滤器.我最初把它设置为空.我也有launchMode空白(默认为标准我相信).我已经玩了大部分这些选项,似乎没有任何改变事实,即ActivityManager似乎想要将活动作为一个新任务启动,并想要忽略返回的意图(我需要).
Bar*_*man 10
问题是您使用launchMode ="singleInstance"声明了您的活动,因此Android在启动Login活动时会创建一个新任务(即新进程).不同任务中的活动不能相互返回结果.从Activity.startActivityForResult()docs:
例如,如果要启动的活动使用singleTask启动模式,则它将不会在您的任务中运行,因此您将立即收到取消结果.
singleInstance就像singleTask,但更具限制性.尝试从清单中删除launchMode属性,以便Login活动将在同一任务中启动,然后在需要在单独任务中启动其他活动时使用FLAG_ACTIVITY_NEW_TASK.
巴里
归档时间: |
|
查看次数: |
5622 次 |
最近记录: |