【问题标题】:Android crash when attempting to take picture尝试拍照时Android崩溃
【发布时间】:2016-07-28 04:13:26
【问题描述】:

尝试创建一个安卓应用。它将进入我的第二个活动,并将在单击返回按钮时返回。但是我希望能够在第二个活动中拍照。当我单击按钮时,应用程序崩溃。

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

这是错误信息。

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) 

【问题讨论】:

  • 发布带有错误消息的 logcat 输出。
  • 你得到什么错误信息?
  • 这个点击处理程序在哪里? 07-25 20:56:53.451 9055-9055/com.example.gary.natureall E/AndroidRuntime:致命异常:主进程:com.example.gary.natureall,PID:9055 java.lang.IllegalStateException:无法执行方法对于 android:onClick

标签: android


【解决方案1】:

看起来像是权限问题。 堆栈跟踪的相关部分是:

java.lang.SecurityException: Permission Denial: 开始 Intent { 行动=android.media.action.IMAGE_CAPTURE cmp=com.sec.android.app.camera/.Camera } 来自 ProcessRecord{3ef341 9055:com.example.gary.natureall/u0a10} (pid=9055, uid=10010) 与 撤销权限android.permission.CAMERA

你必须添加

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

到您的清单,对于 Android 6.0,您也必须在运行时处理权限 - 请参阅 App crashes due to java.lang.SecurityException 示例

【讨论】:

  • 谢谢我有这个权限。运行时异常是我没有排序的东西,我得看看它。再次感谢。
【解决方案2】:

感谢您的所有帮助。实际上是通过删除清单中的权限请求来实现的。我去寻求更多帮助并看到了这个解决方案。试一试,它奏效了。我对此还不够了解,不知道为什么,但胜利就是胜利。如果这不是一个糟糕的参考,我有点像斯蒂芬金的 Tommyknockers。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多