使用意图在应用程序内使用相机,但仍然崩溃

时间:2018-10-12 13:58:17

标签: android

我需要你的帮助。我按照说明在Android Developer上的应用程序内使用相机,但我的应用程序崩溃了。我什至无法打开相机。

这是我的代码(方法“ goToCamera” 由我的activity.xml中的 android:name =“ onClick” 调用,因此它接受了一个View对象):

public class PostActivity extends AppCompatActivity {

static final int REQUEST_IMAGE_CAPTURE = 123;
public static final int REQUEST_TAKE_PHOTO = 1;
ImageView mImageView;

String mCurrentPhotoPath;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_post);
    Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
    setSupportActionBar(myToolbar);
}

protected void goToHome(View view) {
    finish();
}

protected void goToCamera(View v) {
    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE);
}
}

我已经将此添加到清单中了

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

我已经尝试使用它:

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
    startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}

但是它不起作用。该应用程序继续崩溃。

非常感谢您。

2 个答案:

答案 0 :(得分:0)

您需要这样的许可。

protected void goToCamera(View v) {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
            != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION);
    } else {

        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE);
    }
}

在活动中,您需要重写onRequestPermissionsResult方法以进行权限回调。

 @Override
  public void onRequestPermissionsResult(int requestCode, @NonNull String[] 
     permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (grantResults.length > 0
            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        goToCamera(null);
    } else {
        // permission denied, boo! Disable the
        // functionality that depends on this permission.
    }
}

答案 1 :(得分:0)

您的意图是正确的,打开相机不需要任何许可。

根据您的日志,这是onClick函数的问题。

将goToCamera更改为公共方法。

使用您的android:onClick xml中的名称检查goToCamera函数的名称