1
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.
    }

しかし、アプリで戻るボタンを押すと、画面全体が黒くなります。スクリーンショットを見つけてくださいここに画像の説明を入力。アプリがハングし、タスク マネージャーでアプリを終了してから再起動することによってアクセスできる唯一の方法です。

4

3 に答える 3

3

戻るボタンを無効にするためにこのコードを試してください

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

カメラから画像をキャプチャしてアクティビティに表示する

于 2012-11-02T08:53:42.057 に答える
1

戻るボタンを無効にしても問題はありません。ただし、アプリの UI スレッドでファイル IO を実行しているときに、この問題の一部を引き起こす可能性がある別の問題があります。

Android には、UI のすべての描画を行う 1 つの UI スレッドがあります。大きなファイルをディスクに書き込んだり、ディスクからビットマップを読み取ったりしてこのスレッドをブロックすると、電話機の UI がフリーズし、重い作業が完了するまでユーザー入力に反応しなくなります。

UI スレッドをブロックしない方法の詳細については、応答性に関するこの記事を読むことをお勧めします。

于 2012-11-02T08:53:15.177 に答える
1

独自のアプリ内でのみ BackButton をインターセプトできます。ご覧のとおり、あなたはある種の CameraApp を開始していて、それがあなたのために写真を選ぶはずです。CameraActivity の BackButton を制御することはできません。画面には ImageView がありますが、ビットマップを設定することはありません。画面から出ることができず、タスクマネージャーを介して「強制終了」する必要があるため、BackButton の無効化は機能します。BackButton はアクティビティ内では機能しません。

于 2012-11-02T08:53:24.957 に答える