Moblile手机中的App Crash

时间:2018-03-06 21:08:04

标签: java android

我正在尝试为Android手机制作相机应用程序。代码显示没有错误,但是当我在启动应用程序后在手机上运行它时,它会崩溃,从而出现此错误:

  

“不幸的是应用停止了”

package com.my.hp.myapp;

import android.Manifest;
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;   
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class CameraActivity extends AppCompatActivity implements View.OnClickListener {
    private static final int REQUEST_CODE_SOME_FEATURES_PERMISSIONS = 1;
    private static final int CAMERA_PIC_REQUEST = 2;
    private ImageView img;
    private Button btn1;
    private Uri fileUri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_camera);
        img = findViewById(R.id.image);
        btn1 = findViewById(R.id.butt);
        btn1.setOnClickListener(this);
    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    private void checkpermission() {
        int hasCameraPermission =
                checkSelfPermission(Manifest.permission.CAMERA);
        int hasStoragePermission =
                checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
        List<String> permissions = new ArrayList<>();
        if (hasCameraPermission != PackageManager.PERMISSION_GRANTED) {
            permissions.add(Manifest.permission.CAMERA);
        }
        if (hasStoragePermission != PackageManager.PERMISSION_GRANTED) {
            permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
        }
        if (!permissions.isEmpty()) {
            requestPermissions(permissions.toArray(new String[permissions.size()]),
                    REQUEST_CODE_SOME_FEATURES_PERMISSIONS);
        }
    }

    @RequiresApi(api=Build.VERSION_CODES.M)
    private boolean hasPermission() {
        int hasCameraPermission =
                checkSelfPermission(Manifest.permission.CAMERA);
        int hasStoragePermission =
                checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE);

        return (hasCameraPermission==PackageManager.PERMISSION_GRANTED && hasStoragePermission==PackageManager.PERMISSION_GRANTED);
    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    public void onClick(View view) {
        switch(view.getId())
        {
            case R.id.butt:
                if(hasPermission())
                {
                    openCamera();
                }
                else{
                    checkpermission();
                }
                break;
        }

    }
    private void openCamera()
    {
        String timeStamp=new
                SimpleDateFormat("yyyyMMdd_HHmms").format(new Date());
        ContentValues values = new ContentValues();
        values.put(MediaStore.Images.Media.TITLE,"IMG_"+ timeStamp+".jpg");
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        fileUri =
                getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
        startActivityForResult(intent, CAMERA_PIC_REQUEST);
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
        switch (requestCode) {
            case REQUEST_CODE_SOME_FEATURES_PERMISSIONS: {
                for (int i = 0; i < permissions.length; i++) {
                    if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
                        openCamera();
                    } else if (grantResults[i] == PackageManager.PERMISSION_DENIED)
                    {
                        Log.d("Permissions", "Permission Denied: " + permissions[i]);
                    }
                }
            }
            break;
            default:{
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            }
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_PIC_REQUEST) {
            if (resultCode == RESULT_OK) {
                if(data != null){
                    Bundle extras = data.getExtras();
                    Bitmap imageBitmap = (Bitmap) extras.get("data");
                    img.setImageBitmap(imageBitmap);
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

  

首先检查您是否在AndroidManifest.xml

中添加了相机并读取了存储权限
 <uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>