【问题标题】:startActivityForResult not triggering onActivityResultstartActivityForResult 未触发 onActivityResult
【发布时间】:2017-05-30 08:18:36
【问题描述】:

我正在尝试制作一个使用手机摄像头的简单应用,所以我关注了这个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");
    }
}

我不仅不明白为什么没有调用该方法并且“接受”按钮被“阻止”,而且我也不明白为什么只有在按下退出按钮时才调用该方法。

有什么想法吗?

谢谢!

【问题讨论】:

  • 您正在测试此代码的设备版本。希望您获得所有必要的权限,因为棉花糖版本以后有几个危险的权限必须由用户授予。
  • 您是否在将其 URI 传递给相机应用程序之前创建了该文件?
  • @makovkastar 我已经按照tutorial 所说的那样创建了文件(createImageFile() 函数)

标签: android android-activity camera onactivityresult startactivityforresult


【解决方案1】:

如果文件不存在,相机活动将不会返回。这是一个案例。

【讨论】:

  • 是的,这可能是其中一种情况。
  • 如果您直接引用文件夹中的文件,而您在调用之前尚未创建。这也可能导致此类问题。在这种情况下,首先调用创建文件夹。
【解决方案2】:

您必须授予访问相机的权限

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

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

【讨论】:

    【解决方案3】:

    试试这个你的问题会解决的:

     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");
        }
    

    【讨论】:

      猜你喜欢
      • 2014-08-11
      • 2014-10-24
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多