2016-07-25 89 views
0

试图创建一个Android应用程序。这是我的第二个活动,并将返回点击返回按钮。但是我希望能够在第二项活动中拍摄照片。当我点击按钮时,应用程序崩溃。尝试拍照时Android崩溃

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)  
+1

发布带有错误消息的logcat输出。 –

+2

你得到了什么错误信息? –

+0

这个点击处理程序在哪里? 07-25 20:56:53.451 9055-9055/com.example.gary.natureall E/AndroidRuntime:致命异常:主进程:com.example.gary.natureall,PID:9055 java.lang.IllegalStateException:无法执行方法用于机器人:的onClick –

回答

1

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

java.lang.SecurityException异常:权限拒绝:启动意图{ ACT = 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举例

+0

谢谢我有这个permis sion in。运行时异常是我没有排序的东西,我不得不看看它。再次感谢。 – Javaiskillingme

0

感谢您的全力帮助。实际上通过删除清单中的权限请求来实现这一功能。我去寻找更多的帮助,并看到这个解决方案。给它一个去,它的工作。我对此没有足够的了解,知道为什么,但一场胜利是一场胜利。如果这不是一个不好的参考,我有点像Stephen King的Tommyknockers。