将回调传递给startActivityForResult而不更改活动类

时间:2016-04-18 13:01:11

标签: android android-intent android-activity

我的问题是我需要从我的网站获取cookie。为了解决这个问题,我有一个像http://example.com/cookie这样的API端点,可以使用应用模式myapp://cookie=some_cookie重定向

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

    if (goToBrowser) { // Going to url which redirects back to this activity
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        startActivityForResult(intent, RESULT_OK);
    } else { // Parcing incoming url
        setResult(RESULT_OK);
        finish();
    }
}

我有Activity处理应用程序架构。如果我无法更改some_cookie课程,我怎样才能获得appActivity

更新: 我设法使用答案获取cookie,但是当我调用finish()时,它会返回浏览器,而不是活动,它会调用浏览器

更新2 : 我更新了代码,添加了标志,但行为相同

4 个答案:

答案 0 :(得分:2)

您可以使用嗅探器活动:

1:从AndroidManifest.xml中取消注册现有活动的intent过滤器(删除intent-filter data / scheme / host / path)

2:您可以创建一个新的CookieSnifferActivity并将其注册到AndroidManifest.xml中,使用完全相同的外部意图过滤器(您从现有活动中删除的数据),例如:

@IBAction func logout(sender: AnyObject) {
    performSegueWithIdentifier("MainToLoginSegue", sender: nil)    
}

3:在新的CookieSnifferActivity的onCreate中,您现在应该能够读取cookie数据了:

<activity android:name=".my.package.CookieSnifferActivity">
    <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="example.com" />
        <data android:pathPrefix="cookie"/>
    </intent-filter>
</activity>

4:在CookieSnifferActivity的onActivityResult()中,转发输出结果:

    getIntent().getData().getPath()

5:最后你只想将嗅觉意图转发给之前的处理活动:

protected void onActivityResult (int requestCode, int resultCode, Intent data){
    setResult(resultCode)
    finish();
    //...
}

答案 1 :(得分:0)

据我所知,每当你致电Time时。它将重定向到http://example.com/cookie并且您需要来自重定向网址的cookie。如果我在假设情景时出错,请告诉我。这是可能的解决方案。

myapp://cookie=some_cookie

答案 2 :(得分:0)

我不确定我是否正确理解了你的问题。但如果myapp://cookie=some_cookie是您应用的深层链接,那么您可以通过以下方法获取cookie param的值

//onCreate function of activity which processes app schema
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if (getIntent() != null && getIntent().getData() != null) {
      Uri data = getIntent().getData();
      //your cookie
      String cookie = data.getQueryParameter("cookie");
  }

}

答案 3 :(得分:0)

尝试使用类似于Markus&#39;回答,但有一个不同的旗帜。使用代理活动来捕获应用程序架构意图并在那里提取cookie。然后启动启动浏览器的原始活动,将cookie作为Intent中的数据传递,并在Intent中设置FLAG_ACTIVITY_CLEAR_TOP标志。

此标志应清除在原始活动之后启动的所有活动,并且您的活动堆栈应在启动浏览器之前返回,并将cookie作为数据传递给原始活动。