我的应用程序中有以下流程:
SignInActivity (MAIN) -> Android Browser (for OAuth) -> OAuth Activity ->
-> PinCode Activity -> SignInActivity -> AccountActivity
标记所有活动的NoHistory = True
。
在我的测试中,我看到当我在AccountActivity
并且我将应用程序发送到后台时(通过单击主页按钮),应用程序将使用OAuth Activity
恢复。这非常令人不安,因为OAuth
流在触发PinCode
流后立即完成。像:
try
{
Server.FinalOAuthChallenge(...) // blocking API
...
GoToPinCodeSetupActivity();
Intent startPinFlow = new Intent(this, typeof(PinCodeActivity));
startPinFlow.PutExtra(SKConstants.SKPinCodeIntentArgumentIsStartKey, true);
startPinFlow.PutExtra(SKConstants.SKPinCodeIntentArgumentTypeKey, (int)PinCodeActivity.Type.Set);
StartActivity(startPinFlow);
Finish();
}
每次应用程序从后台启动时,它实际上都会启动此OAuth Activity
。它也很奇怪,因为我已经将NoHistory
标志设置为true。
以下是我创建浏览器意图的方法:
Intent oauthIntent = new Intent(Intent.ActionView, uri);
oauthIntent.AddFlags(ActivityFlags.ClearTask);
oauthIntent.AddFlags(ActivityFlags.NewTask);
activity.StartActivity(oauthIntent);
这是我的AndroidManifest.xml
文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.alpha.romeo" android:versionName="1.1.3" android:versionCode="9">
<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="19" />
<application android:name="AlphaRomeo.SKApplication" android:label="AlphaRomeo" android:icon="@drawable/icon">
<activity android:label="@string/appName" android:name="AlphaRomeo.SignInActivity" android:screenOrientation="portrait" android:configChanges="orientation" android:noHistory="true">
<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.CREATE_SHORTCUT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:host="*" />
<data android:pathPattern=".*\\.ALPHAROMEO" />
<data android:pathPattern=".*\\..*\\.ALPHAROMEO" />
<data android:pathPattern=".*\\..*\\..*\\.ALPHAROMEO" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.ALPHAROMEO" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ALPHAROMEO" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ALPHAROMEO" />
<data android:mimeType="*/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
<data android:host="*" />
<data android:pathPattern=".*\\.ALPHAROMEO" />
<data android:pathPattern=".*\\..*\\.ALPHAROMEO" />
<data android:pathPattern=".*\\..*\\..*\\.ALPHAROMEO" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.ALPHAROMEO" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ALPHAROMEO" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ALPHAROMEO" />
<data android:mimeType="*/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="file" />
<data android:host="*" />
<data android:pathPattern=".*\\.ALPHAROMEO" />
<data android:pathPattern=".*\\..*\\.ALPHAROMEO" />
<data android:pathPattern=".*\\..*\\..*\\.ALPHAROMEO" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.ALPHAROMEO" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ALPHAROMEO" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ALPHAROMEO" />
<data android:mimeType="*/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="content" />
<data android:mimeType="application/octet-stream" />
</intent-filter>
</activity>
<activity android:name="AlphaRomeo.OAuthActivity" android:label="@string/appName">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="com.alpha.romeo" android:host="oauth" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
</manifest>