1

从我的 Android 应用程序中,我希望启动默认网络浏览器以将用户发送到验证网页,然后在验证后使用回调将它们发送回我的应用程序。

我的功能工作正常,但我遇到的困难是拦截用户决定他们不想在网络浏览器中验证自己并单击后退按钮返回我的应用程序的情况。

我尝试使用 startActivityForResult() 启动 Web 浏览器,这样我就可以使用 onActivityResult() 拦截返回点击,但由于某种原因,在启动 Web 浏览器后会立即调用 onActivityResult(),而在用户单击返回时根本不会调用。

这是一些演示问题的基本测试代码:

public class MainActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        Log.i("MainActivity","onCreate called");

        Uri uri = Uri.parse("http://www.google.com");

        Intent intent = new Intent(Intent.ACTION_VIEW,uri);

        startActivityForResult(intent,101);

        Log.i("MainActivity","startActivityForResult called");
    }

    @Override
    public void onResume()
    {
        super.onResume();

        Log.i("MainActivity","onResume called");
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        Log.i("MainActivity","onActivityResult called");
    }
}

运行此代码后的输出:

I/MainActivity(545): onCreate called
I/MainActivity(545): startActivityForResult called
I/MainActivity(545): onResume called
I/MainActivity(545): onActivityResult called
I/MainActivity(545): onResume called

然后,如果用户从 Web 浏览器单击返回,它只是第三次调用 onResume()。

因此,鉴于此,有人对我如何识别用户何时从浏览器返回有任何建议吗?

4

2 回答 2

5

试试这个怎么样:

@Override
public void onWindowFocusChanged(boolean hasFocus)
{
    super.onWindowFocusChanged(hasFocus);
}
于 2013-01-08T21:13:07.567 回答
0

您的日志的原因是:

  1. 你从 打来 startActivityForResult(intent,101);onCreate()onResume()生命周期方法通常紧随其后onCreate(),这就是为什么您会看到第一个onResume()

  2. 浏览器总是在一个新任务中打开,所以onActivityResult()会立即被调用,结果代码RESULT_CANCELLED

  3. 回来后,您的活动再次可见,您将onResume()在日志中看到

于 2015-05-30T05:48:25.743 回答