【问题标题】:redirecting to Android app from browser从浏览器重定向到 Android 应用
【发布时间】:2013-08-05 15:29:40
【问题描述】:

我目前正在开发一个 Android 应用程序,该应用程序通过 HTML 请求从服务器请求信息,并获得一个参数字符串作为回报。这发生在启动过程中,以便在应用第一次运行时对其进行配置。

为了将请求发送到服务器,我从我的应用程序的主要活动的 OnCreate 方法中调用以下内容:

String URL = "http://myserver.mydomain.com/users/start";            
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(URL));
startActivity(browserIntent);

服务器,一个 Rails 应用程序,获取所需的参数值并使用以下语句重定向回应用程序:

redirect_to "http://myappname.mydomain.com/?#{mobile_params.to_query}"

我在我的 AndroidManifest.xml 中为处理从服务器返回的参数的活动创建了一个意图过滤器。意图过滤器如下所示:

    <activity
        android:name=".StartFromUriActivity"
        android:launchMode="singleTop"
        android:noHistory="true"
        android:screenOrientation="behind"
        android:theme="@style/NoTitle" 
        android:exported="true" >
        <intent-filter>
            <data android:scheme="http" android:host="myappname.mydomain.com" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
             <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>
    </activity>

最后,我的 StartFromUriActivity.java 的前几行如下所示:

public class StartFromUriActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Uri URIdata = getIntent().getData();
        if(URIdata != null) {
            parameter1value = URIdata.getQueryParameter("param1");
        }
    finish();
    }
}

所有这些实际上都可以正常工作,只有一个例外。应用程序打开浏览器,将 URI 发送到服务器,该服务器使用所需的参数值重定向回应用程序,意图过滤器指向活动并且参数被正确读取。唯一的问题是浏览器窗口留在前台,我必须手动关闭它。我已经尝试了所有我能想到的让我的应用程序进入前台并让浏览器关闭或进入后台但没有成功的方法。我错过了什么会导致我的应用正确地被带到前台?

【问题讨论】:

  • 我认为 android:allowTaskReparenting="true" 会处理这个?我不完全确定,但 android 文档谈到了你所描述的问题。
  • 感谢 dsschnau,这并没有解决问题,但它为我指明了正确的方向
  • 太棒了!很高兴我能帮上点忙。
  • 在尝试此方法从 URI 重定向到我的应用程序但未成功后,我发现这几乎是相同的方法,但它对我有用。 simonwdixon.wordpress.com/2011/05/06/…

标签: java android redirect


【解决方案1】:

我尝试了 dsschnau 将 android:allowTaskReparenting="true" 添加到 AndroidManifest.xml 中的活动的建议。这并没有解决问题,所以我尝试添加 android:parentActivityName=".MainActivity" 和 android:taskAffinity="myapp" 以便重新设置有明确的目标,但仍然没有运气。

然后我意识到问题在于 StartFromUriActivity.OnCreate 中的 finish() 语句正在结束活动,并且它正确地返回到堆栈中的下一个活动,即浏览器。解决方案是在 finish() 语句之前添加以下行。

    Intent intent = new Intent(this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);

【讨论】:

    猜你喜欢
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2023-01-25
    • 1970-01-01
    • 2020-11-01
    相关资源
    最近更新 更多