1

私のAndroidアプリから、デフォルトのWebブラウザーを起動して、ユーザーを確認Webページに送り、確認したら、コールバックを使用してユーザーをアプリに送り返したいと思います。

その機能は問題なく動作していますが、問題があるのは、ユーザーがWebブラウザーで自分自身を確認したくないと判断し、[戻る]ボタンをクリックしてアプリに戻るという状況を傍受することです。

startActivityForResult()を使用してWebブラウザーを起動しようとしましたが、onActivityResult()を使用してバッククリックをインターセプトできますが、何らかの理由で、ユーザーがクリックバックしたときに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()を3回呼び出すだけです。

それで、ユーザーがブラウザからクリックバックしたときに私がどのように認識できるかについて誰かが何か提案がありますか?

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()、resultCodeを使用してすぐに呼び出されますRESULT_CANCELLED

  3. 戻ってくると、あなたのアクティビティが再び表示さonResume()れ、ログに表示されます

于 2015-05-30T05:48:25.743 に答える