我正在尝试创建一个使用手机摄像头的简单应用,所以我按照tutorial进行了操作 基本上我有一个工厂,点击启动相机,这是结果:
它应该启动相机......
如果我关闭相机,它会打印“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");
}
}
不仅我不理解为什么没有调用该方法而且“阻止”接受按钮,但我也无法理解为什么只有在按下退出按钮时调用该方法。
有什么想法吗?
谢谢!
答案 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");
}