Javaiskillingme
Javaiskillingme

Reputation: 49

Android crash when attempting to take picture

Trying to create an android app. It's going to my second activity and will return on clicking the return button. However I want to be able to take a picture in the second activity. When I click the button the app crashes.

package com.example.gary.natureall;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.media.Image;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import java.io.IOException;


public class uploadPicScreen extends AppCompatActivity {
    ImageView ivCamera, ivUpload, ivGallery, ivImage;

    static final int REQUEST_IMAGE_CAPTURE = 144;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.upload_picture_layout);
        Intent activityThatCalled = getIntent();
        String previousActivity = activityThatCalled.getExtras().getString("callingActivity");
        TextView callingActivityMessage = (TextView) findViewById(R.id.calling_activity_info_text_view);
        callingActivityMessage.append(" "+ previousActivity);
        ImageView ivCamera = (ImageView) findViewById(R.id.ivCamera);
        ivImage = (ImageView) findViewById(R.id.ivImage);

if(! hasCamera())
    ivCamera.setEnabled(false);
    }
//Check if device has camera
    private boolean hasCamera(){
        return getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
    }
//Launch the camera
    public void launchCamera(View view){
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        //Take a picture and pass the result to onActivityResult
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);

    }

    //If you want to return to the image captured


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK){
            //Get the photo
            Bundle extras = data.getExtras();
            Bitmap photo = (Bitmap) extras.get("data");
            ivImage.setImageBitmap(photo);

        }
    }

    public void onReturnBtnClick(View view) {
        Intent goingBack = new Intent();
        setResult(RESULT_OK, goingBack);
        finish();
    }
}

Here is the error message.

07-25 20:56:53.451 9055-9055/com.example.gary.natureall E/AndroidRuntime: FATAL EXCEPTION: main
                                                                          Process: com.example.gary.natureall, PID: 9055
                                                                          java.lang.IllegalStateException: Could not execute method for android:onClick
                                                                              at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
                                                                              at android.view.View.performClick(View.java:5698)
                                                                              at android.widget.TextView.performClick(TextView.java:10846)
                                                                              at android.view.View$PerformClick.run(View.java:22565)
                                                                              at android.os.Handler.handleCallback(Handler.java:739)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                              at android.os.Looper.loop(Looper.java:158)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:7230)
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
                                                                           Caused by: java.lang.reflect.InvocationTargetException
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
                                                                              at android.view.View.performClick(View.java:5698) 
                                                                              at android.widget.TextView.performClick(TextView.java:10846) 
                                                                              at android.view.View$PerformClick.run(View.java:22565) 
                                                                              at android.os.Handler.handleCallback(Handler.java:739) 
                                                                              at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                              at android.os.Looper.loop(Looper.java:158) 
                                                                              at android.app.ActivityThread.main(ActivityThread.java:7230) 
                                                                              at java.lang.reflect.Method.invoke(Native Method) 
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                                                                           Caused by: java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE cmp=com.sec.android.app.camera/.Camera } from ProcessRecord{3ef341 9055:com.example.gary.natureall/u0a10} (pid=9055, uid=10010) with revoked permission android.permission.CAMERA
                                                                              at android.os.Parcel.readException(Parcel.java:1620)
                                                                              at android.os.Parcel.readException(Parcel.java:1573)
                                                                              at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3130)
                                                                              at android.app.Instrumentation.execStartActivity(Instrumentation.java:1541)
                                                                              at android.app.Activity.startActivityForResult(Activity.java:4284)
                                                                              at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48)
                                                                              at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75)
                                                                              at android.app.Activity.startActivityForResult(Activity.java:4231)
                                                                              at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:871)
                                                                              at com.example.gary.natureall.uploadPicScreen.launchCamera(uploadPicScreen.java:48)
                                                                              at java.lang.reflect.Method.invoke(Native Method) 
                                                                              at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                                                                              at android.view.View.performClick(View.java:5698) 
                                                                              at android.widget.TextView.performClick(TextView.java:10846) 
                                                                              at android.view.View$PerformClick.run(View.java:22565) 
                                                                              at android.os.Handler.handleCallback(Handler.java:739) 
                                                                              at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                              at android.os.Looper.loop(Looper.java:158) 
                                                                              at android.app.ActivityThread.main(ActivityThread.java:7230) 
                                                                              at java.lang.reflect.Method.invoke(Native Method) 
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

Upvotes: 0

Views: 592

Answers (2)

Javaiskillingme
Javaiskillingme

Reputation: 49

thanks for all your help. Actually got this working by removing the permission request in the manifest. I went looking for more help and saw this solution. Gave it a go and it worked. I'm not well up enough on this to know why, but a win is a win is a win. I'm kind of like on of Stephen King's Tommyknockers if that isn't a bad reference.

Upvotes: 0

GreyBeardedGeek
GreyBeardedGeek

Reputation: 30088

It looks like a permission problem. The relevant part of the stack trace is:

java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE cmp=com.sec.android.app.camera/.Camera } from ProcessRecord{3ef341 9055:com.example.gary.natureall/u0a10} (pid=9055, uid=10010) with revoked permission android.permission.CAMERA

You'll have to add

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

to your manifest, and for Android 6.0, you will have to handle the permission at runtime too - see App crashes due to java.lang.SecurityException for an example

Upvotes: 1

Related Questions