安卓:返回按钮不起作用时,相机模式是开放的 [英] Android: return button not work when camera mode is open

查看:113
本文介绍了安卓:返回按钮不起作用时,相机模式是开放的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的申请一张照片按钮是存在的。当我点击该按钮的应用在摄像模式下开启和拍摄照片后,它会在布局返回,并显示捕获的照片在这个layout.But当应用程序在摄像模式下,当我preSS返回按钮,然后那个时候应用程序停止工作,并显示:

  

应用程序AppName的(XXX)已意外停止[强制关闭]

在LogCat中它显示以下错误:

  

java.lang.RuntimeException的:不提供结果ResultInfo {谁= NULL,请求= 1888,结果为0,数据= NULL}到活动{com.XXX.android.XXX/com.XXX.android.XXX.FirstActivity }:显示java.lang.NullPointerException

但在这里我想我的应用程序返回的布局。 在我的应用程序,我写如下code: main.xml中我创建一个ImageView的一EditView中,一张照片按钮和一个保存按钮:

 < ImageView的
   机器人:ID =@ + ID / test_image
   机器人:SRC =@可绘制/ AAS
   机器人:layout_width =180dp
   机器人:layout_height =150dp
   机器人:layout_below =@ ID / EDIT2
   机器人:layout_toRightOf =@ ID / main_view_id_text7
   机器人:layout_alignParentRight =真
   机器人:layout_marginTop =5DP
   机器人:layout_marginLeft =2DP/>
<的EditText
    机器人:ID =@ + ID / EDIT2
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =30dp
    机器人:layout_below =@ ID / EDIT1
    机器人:layout_centerHorizo​​ntal =真
    机器人:layout_marginTop =9dp
    机器人:layout_marginRight =4DP
    机器人:layout_marginLeft =2DP
    机器人:layout_toRightOf =@ ID /按钮1
    机器人:layout_alignParentRight =假
    机器人:背景=@色/ light_yellow
    机器人:文字颜色=@色/深蓝色
    机器人:inputType =文本
    机器人:提示=图片名称/>
<按钮
    机器人:ID =@ + ID /按钮1
    机器人:layout_width =70dp
    机器人:layout_height =36dp
    机器人:layout_below =@ ID / main_view_id_text4
    机器人:layout_marginTop =11DP
    机器人:的onClick =addPhoto
    机器人:文本=@字符串/摄
     />
<按钮
     机器人:ID =@ + ID /按钮2
     机器人:layout_width =150dp
     机器人:layout_height =40dp
     机器人:layout_below =@ ID / test_image
     机器人:layout_alignParentLeft =真
     机器人:layout_marginTop =2DP
     机器人:的onClick =savePhoto
     机器人:文本=@字符串/保存/>
 

现在在活动课code摄像头应用程序:

 公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);

    editTextPhoto =(EditText上)findViewById(R.id.edit2);

    buttonPhoto =(按钮)findViewById(R.id.button1);

    ImageView的=(ImageView的)findViewById(R.id.test_image);

    buttonPhoto.setOnClickListener(新View.OnClickListener(){
        公共无效的onClick(视图v){
            addPhoto();
        }
    });

保护无效addPhoto(){

    意图cameraIntent =新的意图(
            android.provider.MediaStore.ACTION_IM​​AGE_CAPTURE);
    startActivityForResult(cameraIntent,CAMERA_REQUEST);

    editTextPhoto.setText(新日期()的toString()+.JPG。);
}

保护无效onActivityResult(INT申请code,INT结果code,意图数据){
    如果(要求code == CAMERA_REQUEST){
        。位图照片=(位图)data.getExtras()获得(数据);
        imageView.setImageBitmap(照片);
    }
}
保护无效savePhoto(){
// code保存拍摄的照片上提供的位置
}
 

我也想上显示的EditText(或TextView中),这是由摄像机拍摄的图像的名称图像名称。通过这个code拍摄的照片保存在画廊/图片文件夹中的手机。还有一件事我想这是当我再次点击图片按钮previous拍摄的照片会从该文件夹中删除,并且拍摄的照片将只保存当我点击保存按钮。

还有一件事也请注明返回按钮将如何处理,所以我用这个应用程序的其他部分。在我的应用程序收集一些数据。假设客户端输入一些数据,并在中间,他/她preSS返回按钮则一个警告框会来你当前的数据将丢失你要什么[是] [否]后的否pressing该应用程序将停止。

问题列表,我现在面临:

  1. 在返回按钮不起作用,而相机的模式是开放的。
  2. 请注明返回按钮将如何处理,所以我用这个应用程序的其它部分
  3. 在找回这是由摄像机拍摄到的照片的名称。
  4. 仅保存了照片,我点击Save按钮等拍摄的照片会不会节省任何其他地方。

类似的问题在这个网站早先问,他们做了什么:他们拍摄照片通过这个code,照片保存在画廊,展示由ImageView的布局,但他们不显示照片布局的名称。

在LogCat中这条消息出现时,我preSS回报的手机或后退按钮,而应用程序是在摄像模式下:

  10月1日至二十三日:47:25.839:E / AndroidRuntime(11266):致命异常:主要
十月1号至23日:47:25.839:E / AndroidRuntime(11266):java.lang.RuntimeException的:不提供结果ResultInfo {谁= NULL,请求= 1888,结果为0,数据= NULL}到活动{com.pixel。 android.locationentry / com.pixel.android.locationentry.FirstActivity}:显示java.lang.NullPointerException
        十月1号至23日:47:25.839:E / AndroidRuntime(11266):在android.app.ActivityThread.deliverResults(ActivityThread.java:2536)
    十月1号至23日:47:25.839:E / AndroidRuntime(11266):在android.app.ActivityThread.handleSendResult(ActivityThread.java:2578)
    十月1号至23日:47:25.839:E / AndroidRuntime(11266):在android.app.ActivityThread.access $ 2000(ActivityThread.java:117)
    十月1号至23日:47:25.839:E / AndroidRuntime(11266):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:965)
    十月1号至23日:47:25.839:E / AndroidRuntime(11266):在android.os.Handler.dispatchMessage(Handler.java:99)
    十月1号至23日:47:25.839:E / AndroidRuntime(11266):在android.os.Looper.loop(Looper.java:130)
    十月1号至23日:47:25.839:E / AndroidRuntime(11266):在android.app.ActivityThread.main(ActivityThread.java:3687)
    十月1号至23日:47:25.839:E / AndroidRuntime(11266):在java.lang.reflect.Method.invokeNative(本机方法)
    十月1号至23日:47:25.839:E / AndroidRuntime(11266):在java.lang.reflect.Method.invoke(Method.java:507)
    十月1号至23日:47:25.839:E / AndroidRuntime(11266):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:867)
    十月1号至23日:47:25.839:E / AndroidRuntime(11266):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    十月1号至23日:47:25.839:E / AndroidRuntime(11266):在dalvik.system.NativeStart.main(本机方法)
    十月1号至23日:47:25.839:E / AndroidRuntime(11266):由:显示java.lang.NullPointerException
    十月1号至23日:47:25.839:E / AndroidRuntime(11266):在com.pixel.android.locationentry.FirstActivity.onActivityResult(FirstActivity.java:420)
    十月1号至23日:47:25.839:E / AndroidRuntime(11266):在android.app.Activity.dispatchActivityResult(Activity.java:3908)
    十月1号至23日:47:25.839:E / AndroidRuntime(11266):在android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
十月1号至23日:47:25.839:E / AndroidRuntime(11266):11 ...更多
 

解决方案

更​​改onActivityResult实现以这样一种方式,它可以处理空响应过(即,如果你不采取事先知情同意并简单地返回)。例如:

 保护无效onActivityResult(INT申请code,INT结果code,意图数据){
    如果(要求code == CAMERA_REQUEST){
        。位图照片=(位图)data.getExtras()获得(数据);

        如果(照片!= NULL)
             imageView.setImageBitmap(照片);
    }
}
 

in my application one photo button is there. when I click on that button application open in camera mode and after capturing photo it will return on the layout and show that capture photo on this layout.But when the application is in camera mode and that time when I press return button then application stop working and it show :

The application "AppName" (XXX) has stopped unexpectedly [Force Close]

on the LogCat it show following error :

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=0, data=null} to activity {com.XXX.android.XXX/com.XXX.android.XXX.FirstActivity}: java.lang.NullPointerException

But here I want my application return to the layout. In my application I write following code : In main.xml I create one ImageView, one EditView, one photo button and one save button :

<ImageView 
   android:id="@+id/test_image"
   android:src="@drawable/aas"
   android:layout_width="180dp"
   android:layout_height="150dp"
   android:layout_below="@id/edit2"
   android:layout_toRightOf="@id/main_view_id_text7"
   android:layout_alignParentRight="true"
   android:layout_marginTop="5dp"
   android:layout_marginLeft="2dp" />
<EditText
    android:id="@+id/edit2"
    android:layout_width="fill_parent"
    android:layout_height="30dp"
    android:layout_below="@id/edit1"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="9dp"
    android:layout_marginRight="4dp"
    android:layout_marginLeft="2dp"
    android:layout_toRightOf="@id/button1"
    android:layout_alignParentRight="false"
    android:background="@color/light_yellow"
    android:textColor="@color/darkblue"
    android:inputType="text"
    android:hint="Photo Name" />
<Button 
    android:id="@+id/button1"
    android:layout_width="70dp"
    android:layout_height="36dp"
    android:layout_below="@id/main_view_id_text4"
    android:layout_marginTop="11dp"
    android:onClick="addPhoto"
    android:text="@string/photo"
     />
<Button
     android:id="@+id/button2"
     android:layout_width="150dp"
     android:layout_height="40dp"
     android:layout_below="@id/test_image"
     android:layout_alignParentLeft="true"
     android:layout_marginTop="2dp" 
     android:onClick="savePhoto"
     android:text="@string/save" />

Now in Activity Class code camera application :

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    editTextPhoto = (EditText) findViewById(R.id.edit2);

    buttonPhoto = (Button) findViewById(R.id.button1);

    imageView = (ImageView) findViewById(R.id.test_image);

    buttonPhoto.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            addPhoto();
        }
    });

protected void addPhoto() {

    Intent cameraIntent = new Intent(
            android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(cameraIntent, CAMERA_REQUEST);

    editTextPhoto.setText(new Date().toString() + ".jpg");
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_REQUEST) {
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        imageView.setImageBitmap(photo);
    }
}
protected void savePhoto() {
// code to save captured photo on provided location
}

I also want to show Image name on EditText (or in TextView), the image name which is captured by the Camera. By this code captured photo is stored in Gallery/Photo folder of mobile phone. One more thing I want which is when again I click on photo button the previous captured photo will delete from that folder and the captured photo will save only when I click on Save button.

One more thing please also mention how return button will handle so I use this in other part of application. In my application I collect some data. Suppose client enter some data and in the middle he/she press return button then one Alert box will come "your current data will loss what do you want [Yes] [No]" after pressing on "No" the application will stop.

List of Problem which I am facing :

  1. Return button not work while camera mode is open.
  2. Please mention how return button will handle so I use this in other part of application
  3. Retrieve the name of the photo which is captured by the Camera.
  4. Save only that photo for which I click on save button and other captured photo will not save on any other place.

Similar Question which asked earlier in this website, what they do: They Capture the photo by this code, save photo in gallery and display on the layout by ImageView but they not display the name of photo on the layout.

This message appear on the LogCat when I press return or back button of the mobile phone while application is in Camera mode:

01-23 10:47:25.839: E/AndroidRuntime(11266): FATAL EXCEPTION: main
01-23 10:47:25.839: E/AndroidRuntime(11266): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=0, data=null} to activity {com.pixel.android.locationentry/com.pixel.android.locationentry.FirstActivity}: java.lang.NullPointerException
        01-23 10:47:25.839: E/AndroidRuntime(11266):    at android.app.ActivityThread.deliverResults(ActivityThread.java:2536)
    01-23 10:47:25.839: E/AndroidRuntime(11266):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:2578)
    01-23 10:47:25.839: E/AndroidRuntime(11266):    at android.app.ActivityThread.access$2000(ActivityThread.java:117)
    01-23 10:47:25.839: E/AndroidRuntime(11266):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:965)
    01-23 10:47:25.839: E/AndroidRuntime(11266):    at android.os.Handler.dispatchMessage(Handler.java:99)
    01-23 10:47:25.839: E/AndroidRuntime(11266):    at android.os.Looper.loop(Looper.java:130)
    01-23 10:47:25.839: E/AndroidRuntime(11266):    at android.app.ActivityThread.main(ActivityThread.java:3687)
    01-23 10:47:25.839: E/AndroidRuntime(11266):    at java.lang.reflect.Method.invokeNative(Native Method)
    01-23 10:47:25.839: E/AndroidRuntime(11266):    at java.lang.reflect.Method.invoke(Method.java:507)
    01-23 10:47:25.839: E/AndroidRuntime(11266):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
    01-23 10:47:25.839: E/AndroidRuntime(11266):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    01-23 10:47:25.839: E/AndroidRuntime(11266):    at dalvik.system.NativeStart.main(Native Method)
    01-23 10:47:25.839: E/AndroidRuntime(11266): Caused by: java.lang.NullPointerException
    01-23 10:47:25.839: E/AndroidRuntime(11266):    at com.pixel.android.locationentry.FirstActivity.onActivityResult(FirstActivity.java:420)
    01-23 10:47:25.839: E/AndroidRuntime(11266):    at android.app.Activity.dispatchActivityResult(Activity.java:3908)
    01-23 10:47:25.839: E/AndroidRuntime(11266):    at android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
01-23 10:47:25.839: E/AndroidRuntime(11266):    ... 11 more

解决方案

change your onActivityResult implementation in such a way that it can handle null response too (i.e. if you dont take pic and simply return). for example:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_REQUEST) {
        Bitmap photo = (Bitmap) data.getExtras().get("data");

        if(photo != null)
             imageView.setImageBitmap(photo);
    }
}

这篇关于安卓:返回按钮不起作用时,相机模式是开放的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆