【问题标题】:Android back button with browser oauth returns to browser带有浏览器oauth的Android后退按钮返回浏览器
【发布时间】:2012-10-20 08:46:20
【问题描述】:

第一次发布问题,我很抱歉,关于这个问题有很多问题,但在尝试了许多不同的选项后,我似乎无法让它发挥作用。

我有一个 twitter 应用程序,其主屏幕有一个按钮,通过标准浏览器应用程序请求 oauth twitter 访问,然后返回到主屏幕。如果我点击后退按钮,浏览器应用程序将打开 twitter 网站。我在清单文件中尝试了 noHistory,并且在许多情况下都没有运气,在启动意图 FLAG_ACTIVITY_NO_HISTORY 以及 FLAG_ACTIVITY_CLEAR_TOP 和 Intent.FLAG_ACTIVITY_SINGLE_TOP 时。

这是我最新的代码:

清单文件

<activity android:name=".oauth" 
                  android:label="@string/oauth_name"
                  android:noHistory="true"
                  >
            <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="tm" android:host="twitt" />

            </intent-filter>
        </activity> 
<activity   android:name="com.tweetymanagerpro.Home" 
                    android:label="@string/app_name"
                    android:theme="@android:style/Theme.NoTitleBar"
                    android:windowSoftInputMode="stateHidden|adjustPan">
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" />
                </intent-filter>
          </activity>

在 Home 活动中,我将 oauth 调用如下

Intent settingsActivity = new Intent(getBaseContext(), oauth.class);
                settingsActivity.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                startActivity(settingsActivity);

接下来,在 oauth.onCreate() 中,我调用 twitter url

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl));
            intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

            this.startActivity(intent);

接下来,在 oauth.onResume() 中,我处理令牌等,然后再次启动 Home

Intent i = new Intent(this, Home.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);

与 twitter 的连接效果很好,如果我点击后退按钮,它现在只是在主页上,它会将我带回到正在使用 twitter 进行身份验证的浏览器。

【问题讨论】:

    标签: android twitter-oauth


    【解决方案1】:

    考虑在您控制的 web 视图中呈现 oauth 网页,而不是启动到浏览器应用程序。

    oauth 网页在调用其回调时,实际上会在 webview 中替换自身,您的 WebViewClient 可以在其中捕获预期的 URL、处理结果并完成() webview(将其从活动堆栈中删除) .

    【讨论】:

    【解决方案2】:

    oauth Activity 是实际的浏览器 Activity 吗?如果是这样,您可以在其中启动 Home Activity 后对其调用 finish() 以将其从 Activity 堆栈中删除。

    如果不是,也许如果您的 Home Activity 是从您的 oauth Activity 启动的,那么您的 oauth 类会在您的意图中添加另一个标志。因此,如果您的家庭课程看到此意图,它可以覆盖 BACK 键按下并且不执行默认操作(完成并恢复到您的浏览器活动)。

    【讨论】:

    • 感谢您的回复。对浏览器活动的实际调用是上面带有 Uri.parse(authUrl) 的代码。我已经尝试使用完成,我会将其重新添加并发布结果。
    • 我在每次调用新活动后添加了 finish() 调用,现在一旦我返回主活动,我点击后退按钮,选择应用程序会快速闪烁启动活动屏幕,就是这样。第二次点击后退按钮关闭应用程序。这对我有用,谢谢你提供的信息!
    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 2013-07-20
    • 2017-06-29
    • 2013-01-10
    相关资源
    最近更新 更多