【发布时间】:2017-05-30 08:18:36
【问题描述】:
我正在尝试制作一个使用手机摄像头的简单应用,所以我关注了这个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");
}
}
我不仅不明白为什么没有调用该方法并且“接受”按钮被“阻止”,而且我也不明白为什么只有在按下退出按钮时才调用该方法。
有什么想法吗?
谢谢!
【问题讨论】:
-
您正在测试此代码的设备版本。希望您获得所有必要的权限,因为棉花糖版本以后有几个危险的权限必须由用户授予。
-
您是否在将其 URI 传递给相机应用程序之前创建了该文件?
-
@makovkastar 我已经按照tutorial 所说的那样创建了文件(createImageFile() 函数)
标签: android android-activity camera onactivityresult startactivityforresult