0

我试图做一个简单的应用程序,使用手机相机,所以我跟着这个tutorial 基本上我有一个上点击启动相机晶圆厂,这是结果:startActivityForResult不触发onActivityResult

Result

它启动相机,因为它应该...

如果我关闭相机它打印“REQUEST_PHOTO”和“活动结束”,但如果我拍张照片,然后点击鼠标右键,接受它没有任何反应。该按钮不起作用,onActivityResult方法未被调用。

在这里,你可以看到在onActivityResult方法日志代码的相关部分:

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

不仅我不理解为什么该方法不被调用,接受按钮被“封锁“但我也不明白为什么只有按下退出按钮时才调用该方法。

有什么想法?

谢谢!

+0

哪个版本的设备正在测试此代码。希望你有棉花糖版本之后所有必要的许可,并且有必须由用户授予的危险许可。 –

+0

在将URI传递给相机应用程序之前,您是否创建了该文件? – makovkastar

+0

@makovkastar我创建的文件就像[tutorial](https://developer.android.com/training/camera/photobasics.html)说的那样(createImageFile()函数) –

回答

0

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

+0

是的,这可能是其中之一案子。 –

+0

如果您在调用之前直接引用您尚未创建的文件夹中的文件,这可能也会导致此类问题。在这种情况下,首先调用创建文件夹。 – MobileEvangelist

0

你必须给允许访问摄像头

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

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

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"); 
    } 
相关问题