在Android中禁用后退按钮(不工作)

时间:2012-11-02 08:45:11

标签: android

package com.my.app ;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.Comparator;

import com.my.app .R;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap.CompressFormat;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Base64;
import android.util.Log;
import android.widget.ImageView;
import android.widget.Toast;

public class ImageInfo extends Activity {

    private static final int CAMERA_PIC_REQUEST = 1111;
    private ImageView mImage;

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

        mImage = (ImageView) findViewById(R.id.camera_image);
        //1
        Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, CAMERA_PIC_REQUEST);
    }



    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(resultCode != RESULT_CANCELED)   {
            if(requestCode == CAMERA_PIC_REQUEST){

                Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
                //  mImage.setImageBitmap(thumbnail);
                //3
                ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
                //4
                File file = new File("data/data/com.my.app /photo.jpg");
                File myDir=new File("data/data/com.my.app /");
                try {
                    String encodedPhotoImage;

                    file.createNewFile();
                    FileOutputStream fo = new FileOutputStream(file);
                    //5
                    fo.write(bytes.toByteArray());
                    fo.close();
                    deleteLatest() ;


                    byte[] photoImgBytes=readPhotoFile();
                    ByteArrayOutputStream bao1 = new ByteArrayOutputStream();

                    Bitmap bitmapPhoto = BitmapFactory.decodeByteArray(photoImgBytes, 0, photoImgBytes.length);
                    bitmapPhoto.compress(Bitmap.CompressFormat.JPEG, 100,bao1);
                    byte[] by = bao1.toByteArray();

                    String by1 = Base64.encodeToString(by, 0);
                    encodedPhotoImage =  URLEncoder.encode(by1);
                    file.delete();

                    if (!myDir.exists()) {
                        myDir.mkdirs();
                    }
                    File encryptedFile=new File("data/data/com.my.app /photo.txt");
                    encryptedFile.createNewFile();
                    FileWriter writer = new FileWriter(encryptedFile);
                    writer.append(encodedPhotoImage);
                    writer.close();
                    //Base64.encodeToString(ba1, Base64.DEFAULT);
                    Intent intent=new Intent(ImageInfo.this,Info.class);
                    startActivity(intent);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        }
    }

    private byte[] readPhotoFile(){         
        String url="data/data/com.my.app /photo.jpg";
        Log.e("","Image is"+url);
        Bitmap bm = BitmapFactory.decodeFile(url);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();  
        bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] b = baos.toByteArray(); 
        return b;
    }

    @Override
    public void onBackPressed() {
        // do nothing.
    }


    private void deleteLatest() {
        File f = new File(Environment.getExternalStorageDirectory() + "/DCIM/Camera" );
        File [] files = f.listFiles();
        Arrays.sort( files, new Comparator<Object>()
                {
            public int compare(Object o1, Object o2) {
                if (((File)o1).lastModified() > ((File)o2).lastModified()) {
                    return -1;
                } else if (((File)o1).lastModified() < ((File)o2).lastModified()) {
                    return 1;
                } else {
                    return 0;
                }
            }

                });
        files[0].delete();
    }
}

这是我的java文件。我已经使用

禁用了后退按钮
public void onBackPressed() {
        // do nothing.
    }

但是当在应用程序中按下后退按钮时,整个屏幕变黑。请找到屏幕截图enter image description here。该应用程序挂起,并且可以通过任务管理器终止它然后重新启动它来访问它。

3 个答案:

答案 0 :(得分:3)

尝试使用此代码禁用后退按钮

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {
        if(keyCode==KeyEvent.KEYCODE_BACK)
        {
            return true;
        }
        else
        {
            return super.onKeyDown(keyCode, event);
        }
    }

Capture Image from Camera and Display in Activity

答案 1 :(得分:1)

我看不到后退按钮禁用的问题。但是还有另一个问题可能导致您在应用程序的UI线程中执行文件IO的问题的一部分。

Android有一个UI线程可以完成UI的所有绘制。如果通过将大文件写入磁盘或从磁盘读取位图来阻止此线程,则手机UI将冻结,并且在完成繁重工作之前不会对用户输入作出反应。

我建议您阅读responsiveness上的这篇文章,了解有关不阻止UI线程的更多信息。

答案 2 :(得分:1)

您只能拦截自己应用中的BackButton!正如我所见,你正在开始某种CameraApp,它应该为你挑选一张照片。你无法控制CameraActivity的BackButton。您的屏幕有一个ImageView,但您从未设置过Bitmap。 BackButton的禁用有效,因为你无法离开屏幕而必须通过TaskManager“杀死”它。 BackButton在您的Activity中没有任何功能。