1

この質問は、私の質問に対する回答がないことから生じました: android start activity from background thread

この問題に対する私の取り組みから、バックグラウンド スレッドがユーザー入力に対して startActivityForResult を実行し、結果を取得する方法はないと思います (たとえば、onActivityResult による)。既知の手段または回避策に関するアドバイス(またはそれが機能するAndroidバージョン、私は4xで試しました)では不可能であることを確認してください。以下に調査したオプションの詳細:

私の主なアクティビティは、timertask を介してバックグラウンド スレッドを開始し、後で他のアプリを開始するユーザーによってバックグラウンドに移動されます。次に、バックグラウンドの timertask スレッドが次のように試行します。

        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    //takePictureIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        //takePictureIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
        //startActivity(takePictureIntent);
    }

コードが上記のようにsetFlags(Intent.FLAG_ACTIVITY_NEW_TASK)コメントされている場合、カメラはメイン アクティビティ スタック レベルのバックグラウンドで起動します。がコメント解除されている場合setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)、カメラはフォアグラウンドで開始されますが、メイン アクティビティでは、カメラが写真を撮るのを待たずonActivityResultに呼び出した直後に呼び出されます。startActivityForResult

4

1 に答える 1

0

runOnUiThreadメインスレッドでコードを実行するために使用してみてください:

runOnUiThread(new Runnable() {
        @Override
        public void run() {
           Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
        }
    });
于 2015-12-18T05:22:20.540 に答える