【问题标题】:Using intent to use the camera inside app, but still crash使用意图在应用程序内使用相机,但仍然崩溃
【发布时间】:2018-10-12 22:34:25
【问题描述】:

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

这是我的代码(方法 "goToCamera" 在我的 activity.xml 中由 android:name="onClick" 调用,因此它接受输入一个视图对象):

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

但它不起作用。应用继续崩溃。

非常感谢。

【问题讨论】:

  • 它在奥利奥设备中崩溃了吗?你能发布错误吗
  • 我有牛轧糖,android 7.0
  • 你能发布崩溃日志吗?

标签: android


【解决方案1】:

你需要这样的许可请求。

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

并且在activity中你需要重写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.
    }
}

【讨论】:

    【解决方案2】:

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

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

    将 goToCamera 更改为公共方法。

    检查 goToCamera 函数的名称与您的 android:onClick 在 xml 中的名称

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-07
      • 2016-04-02
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      相关资源
      最近更新 更多