startActivityForResult没有触发onActivityResult

时间:2017-05-30 08:18:36

标签: android android-activity camera onactivityresult startactivityforresult

我正在尝试创建一个使用手机摄像头的简单应用,所以我按照tutorial进行了操作 基本上我有一个工厂,点击启动相机,这是结果:

Result

它应该启动相机......

如果我关闭相机,它会打印“REQUEST_PHOTO”和“ACTIVITY FINISHED”但是如果我拍照然后点击右键接受它就没有任何反应。该按钮不起作用,并且不调用onActivityResult方法。

在这里,您可以使用onActivityResult方法中的Logs查看代码的相关部分:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ...

        if(hasCamera()) {
            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    launchCamera();
                }
            });
        }
    }

    ...

   private void launchCamera() {

        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        ...
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            ...
            photoURI = FileProvider.getUriForFile( ... );

            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
            startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);

        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case REQUEST_TAKE_PHOTO:
                Log.d("DEBUG", "REQUEST_PHOTO");
                if (resultCode == RESULT_OK) {
                    Log.d("DEBUG", "REQUEST_PHOTO RESULT_OK");
                }
                break;
        }

        Log.d("DEBUG", "ACTIVITY FINISHED");
    }
}

不仅我不理解为什么没有调用该方法而且“阻止”接受按钮,但我也无法理解为什么只有在按下退出按钮时调用该方法。

有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

如果文件不存在,Camera活动将不会返回。这是一例。

答案 1 :(得分:0)

您必须获得访问相机的权限

<uses-feature android:name="android.hardware.camera"/>
<uses-permission android:name="android.permission.CAMERA"/>

我认为您正在使用模拟器进行测试,请使用真实设备。

答案 2 :(得分:0)

试一试您的问题将得到解决:

 if(hasCamera()) {
            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                   Intent chooseImageIntent = ImagePicker.getPickImageIntent(YourActivity.this);

                    startActivityForResult(chooseImageIntent, REQUEST_TAKE_PHOTO);
                }
            });

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case REQUEST_TAKE_PHOTO:
                Log.d("DEBUG", "REQUEST_PHOTO");
                if (resultCode == RESULT_OK) {
                    bm = ImagePicker.getImageFromResult(this, resultCode, data);
                if (bm != null) {
                    bm = Bitmap.createScaledBitmap(bm,256,256, true);

                    upload_img.setImageBitmap(bm);
                }
                }
                break;
        }

        Log.d("DEBUG", "ACTIVITY FINISHED");
    }