意图相机崩溃

时间:2017-11-10 16:31:49

标签: java android android-intent camera

我现在正在制作一个简单的Android应用程序。它只是允许用户拍摄照片然后显示它。 当我在虚拟设备中测试它时,没关系。但是,当我下载apk到我的Android设备,我在后置摄像头拍照后,应用已停止并返回主菜单。只是背照相机的问题。 此外,在虚拟设备中,拍照后,照片将成功显示。但它在我的手机中是空的

在MainActivity中,我点击“拍照”,它会启动相机并将我的图像添加到文件夹中。然后它将Photo的路径发送到下一个活动并显示它。

这是我的MainActivity

public class MainActivity extends AppCompatActivity {
    private static final int REQUEST_ID_IMAGE_CAPTURE = 100;
    Button TakePhoto, InsertPhoto, Exit;
    String mCurrentPhotoPath;

    private File createImageFile() throws IOException {
        // Create an image file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "JPEG_" + timeStamp + "_";
        File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File image = File.createTempFile(imageFileName,".jpg",storageDir);


        mCurrentPhotoPath = image.getAbsolutePath();
        return image;
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TakePhoto = (Button) findViewById(R.id.button);
        InsertPhoto = (Button) findViewById(R.id.button3);
        Exit = (Button) findViewById(R.id.button2);
        //Start Camera
        TakePhoto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                if (intent.resolveActivity(getPackageManager()) != null) {
                    // Create the File where the photo should go
                    File photoFile = null;
                    try {
                        photoFile = createImageFile();
                    } catch (IOException ex) {

                        System.out.println(ex);
                    }
                    // Continue only if the File was successfully created
                    if (photoFile != null) {
                        Uri photoURI = Uri.fromFile(photoFile);
                        intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
                        startActivityForResult(intent,REQUEST_ID_IMAGE_CAPTURE);
                    }

                }

            }
        });


    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_ID_IMAGE_CAPTURE) {
            if (resultCode == RESULT_OK) {
                //Bitmap bp = (Bitmap)data.getExtras().get("data");
                //ByteArrayOutputStream stream = new ByteArrayOutputStream();
               // bp.compress(Bitmap.CompressFormat.PNG, 100, stream);
               // byte[] images = stream.toByteArray();
                File imgFile = new  File(mCurrentPhotoPath);
                if(imgFile.exists()){
                    System.out.println("This is file"+mCurrentPhotoPath.toString());
                    Intent Show = new Intent(MainActivity.this, ShowPhoto.class);

                    Show.putExtra("image",imgFile);

                    startActivity(Show);
                }



            } else if (resultCode == RESULT_CANCELED) {
                Toast.makeText(this, "Action canceled", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(this, "Action Failed", Toast.LENGTH_LONG).show();
            }
        }

    }
}

这是ShowPhoto活动

public class ShowPhoto extends Activity {
private LinearLayout Image;
Button Back,Next;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_show_photo);
    Image=(LinearLayout)findViewById(R.id.linearLayout);
    //Get Image from previous Activity
    File image = (File)getIntent().getExtras().get("image");
    Bitmap bmp = BitmapFactory.decodeFile(image.getAbsolutePath());

    ImageView imageView = new ImageView(getApplicationContext());

    imageView.setImageBitmap(Bitmap.createScaledBitmap(bmp, bmp.getWidth()*2, bmp.getHeight()*2, true));

    Image.addView(imageView);





}

}

当我运行app时,这就是我的logcat中的内容 enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

使用时应在运行时请求权限并在Manifest中声明权限

<uses-permission android:name="android.permission.CAMERA"/>

为你的清单

class ConversationsController < ApplicationController
 def create
 @conversation = Conversation.get(current_person.id, params[:person_id])

 add_to_conversations unless conversated?

 respond_to do |format|
   format.js
 end
end

def close
  @conversation = Conversation.find(params[:id])

  session[:conversations].delete(@conversation.id)

  respond_to do |format|
    format.js
  end
end

private

def add_to_conversations
  session[:conversations] ||= []
  session[:conversations] << @conversation.id
end

def conversated?
  session[:conversations].include?(@conversation.id)
end
end
相关问题