2

我和我的朋友尝试编写这个意图相机应用程序来拍照,将其保存到文件夹中,将其显示在 imageView 上并为图片创建哈希值。这里的问题是它在第一次拍照时工作正常,但是当我们尝试第二次继续拍照时出现错误。请帮我看看我们在代码中是否遗漏了任何问题。

这是代码

public class CameraApp extends Activity {

private static final int IMAGE_CAPTURE = 0;

private ImageButton startBtn;
private ImageButton gallery;
private Uri imageUri;
private ImageView imageView;
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
Date now = new Date();
String fileName = formatter.format(now);
final Context context = this;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_camera_app);
    imageView = (ImageView)findViewById(R.id.img);
    startBtn = (ImageButton) findViewById(R.id.startBtn);
    gallery = (ImageButton)findViewById(R.id.gallery);

    startBtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            startCamera();
        }
    });

    gallery.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.setDataAndType(Uri.fromFile(new  File(Environment.getExternalStorageDirectory(),"camera_app")),"image/*");
            startActivity(i);
        }
    });
}

public void startCamera() {
    File photo = null;
    File folder= new File(Environment.getExternalStorageDirectory(),"camera_app");
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");


    if(folder.exists()){
    if (android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) {
        photo = new File(android.os.Environment.getExternalStorageDirectory(), "camera_app/DF_" + fileName + "_PIC.jpg");
    } 
    }

    else{
        folder.mkdirs();
        photo = new File(android.os.Environment.getExternalStorageDirectory(), "camera_app/DF_" + fileName + "_PIC.jpg");
    }
    /*else {
        photo = new File(getCacheDir(), "camera_app/FILE_NAME.jpg");
    }    */

    if (photo != null) {

        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
        imageUri = Uri.fromFile(photo);
        startActivityForResult(intent, IMAGE_CAPTURE);
    }  
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == IMAGE_CAPTURE) {
        if (resultCode == RESULT_OK){
            //try {
                Uri selectedImage = imageUri;

                ContentResolver cr = getContentResolver();
                //InputStream inputStream = cr.openInputStream(imageUri);

               Bitmap bitmap;
               try {
               InputStream inputStream = cr.openInputStream(imageUri);
               bitmap = android.provider.MediaStore.Images.Media.getBitmap(cr, selectedImage);
                imageView.setImageBitmap(bitmap);

                java.security.MessageDigest md = MessageDigest.getInstance("MD5");

                  byte[] buffer = new byte[1024];

                 int read;
                    do {
                      read = inputStream.read(buffer);
                      if (read > 0)
                        md.update(buffer, 0, read);
                    } while (read != -1);
                    inputStream.close();

                    byte[] digest = md.digest();

                    String hexString = "";
                    for (int i = 0; i < digest.length; i++) {
                      hexString += Integer.toString((digest[i] & 0xff) 
                                + 0x100, 16).substring(1);
                    }

               final EditText input = new EditText(this);

                input.setText("DF_" + fileName + "_PIC_");
                new AlertDialog.Builder(this)
                .setTitle("Rename")
                .setMessage("<MD5> "+ hexString)
                .setView(input) 

               .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {


                        String value = input.getText().toString();
                        String value1 = value + ".jpg";
                        final File F=new File(android.os.Environment.getExternalStorageDirectory(), "camera_app/DF_" + fileName + "_PIC.jpg");

                        File newfile=new File(F.getParent(),value1);
                        F.renameTo(newfile);

                    }
                })
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        // Do nothing.
                    }
                })
                .show();

            } catch (Exception e) {
                Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT).show();
                Log.e("Camera", e.toString());
            }


        } else {
            imageUri = null;
            imageView.setImageBitmap(null);

        }       
    } 

}

}

xml代码

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <ImageView 
        android:id="@+id/img"
        android:layout_width="fill_parent" 
        android:layout_height="350dip"
        android:layout_gravity="center"
        android:src="@drawable/camera"
        android:scaleType="fitStart"/>

    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

    <ImageButton   
        android:orientation="horizontal"
        android:id="@+id/startBtn" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="@null"
        android:src="@drawable/img_button"/>

    <ImageButton

        android:id="@+id/gallery" 
        android:layout_width="430dip" 
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="@null"
        android:src="@drawable/gallery_icon"/>

    </LinearLayout>
    </LinearLayout>

显现

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-feature android:name="android.hardware.camera" />  
    <uses-feature android:name="android.hardware.camera.autofocus" />

logcat 错误

    08-27 05:58:02.505: E/vold(556): Error opening switch name path '/sys/class/switch/test2' (No such file or directory)
    08-27 05:58:02.505: E/vold(556): Error bootstrapping switch '/sys/class/switch/test2' (m)
    08-27 05:58:02.505: E/vold(556): Error opening switch name path '/sys/class/switch/test' (No such file or directory)
    08-27 05:58:02.505: E/vold(556): Error bootstrapping switch '/sys/class/switch/test' (m)
    08-27 05:58:02.626: E/flash_image(564): can't find recovery partition
    08-27 05:58:16.086: E/MemoryHeapBase(590): error opening /dev/pmem: No such file or directory
    08-27 05:58:16.086: E/SurfaceFlinger(590): Couldn't open /sys/power/wait_for_fb_sleep or /sys/power/wait_for_fb_wake
    08-27 05:58:16.186: E/GLLogger(590): couldn't load <libhgl.so> library (Cannot find library)
    08-27 05:58:16.276: E/GLLogger(590): couldn't load <libhgl.so> library (Cannot find library)
    08-27 05:58:19.757: E/BatteryService(590): Could not open '/sys/class/power_supply/usb/online'
    08-27 05:58:19.757: E/BatteryService(590): Could not open '/sys/class/power_supply/battery/batt_vol'
    08-27 05:58:19.757: E/BatteryService(590): Could not open '/sys/class/power_supply/battery/batt_temp'
    08-27 05:58:20.355: E/EventHub(590): could not get driver version for /dev/input/mouse0, Not a typewriter
    08-27 05:58:20.526: E/EventHub(590): could not get driver version for /dev/input/mice, Not a typewriter
    08-27 05:58:20.885: E/System(590): Failure starting core service
    08-27 05:58:20.885: E/System(590): java.lang.SecurityException
    08-27 05:58:20.885: E/System(590):  at android.os.BinderProxy.transact(Native Method)
    08-27 05:58:20.885: E/System(590):  at android.os.ServiceManagerProxy.addService(ServiceManagerNative.java:146)
    08-27 05:58:20.885: E/System(590):  at android.os.ServiceManager.addService(ServiceManager.java:72)
    08-27 05:58:20.885: E/System(590):  at com.android.server.ServerThread.run(SystemServer.java:163)
    08-27 05:58:20.895: E/AndroidRuntime(590): Crash logging skipped, no checkin service
    08-27 05:58:22.086: E/LockPatternKeyguardView(590): Failed to bind to GLS while checking for account
    08-27 05:58:25.155: E/ApplicationContext(590): Couldn't create directory for SharedPreferences file shared_prefs/wallpaper-hints.xml
    08-27 05:58:25.890: E/ActivityThread(632): Failed to find provider info for android.server.checkin
    08-27 05:58:26.681: E/ActivityThread(632): Failed to find provider info for android.server.checkin
    08-27 05:58:26.782: E/ActivityThread(632): Failed to find provider info for android.server.checkin
    08-27 05:58:34.680: E/MediaPlayer(561): Unable to to create media player
    08-27 05:58:34.680: E/CameraService(561): Failed to load CameraService sounds.
    08-27 05:58:34.710: E/MediaPlayer(561): Unable to to create media player
    08-27 05:58:34.720: E/CameraService(561): Failed to load CameraService sounds.
    08-27 05:58:36.660: E/Camera(738): _getParameters: picture-format=jpeg;picture-size=213x350;preview-format=yuv422sp;preview-frame-rate=15;preview-size=176x144
    08-27 05:58:36.660: E/Camera(738): setParameters()
    08-27 05:58:37.901: E/Camera(738): setParameters()
    08-27 05:58:46.891: E/MediaPlayer(561): Unable to to create media player
    08-27 05:58:46.891: E/CameraService(561): Failed to load CameraService sounds.
    08-27 05:58:46.891: E/MediaPlayer(561): Unable to to create media player
    08-27 05:58:46.891: E/CameraService(561): Failed to load CameraService sounds.
    08-27 05:58:47.821: E/Camera(738): _getParameters: picture-format=jpeg;picture-size=213x350;preview-format=yuv422sp;preview-frame-rate=15;preview-size=176x144
    08-27 05:58:47.840: E/Camera(738): setParameters()
    08-27 05:58:48.910: E/Camera(738): setParameters()
    08-27 05:59:10.970: E/MediaPlayer(561): Unable to to create media player
    08-27 05:59:10.970: E/CameraService(561): Failed to load CameraService sounds.
    08-27 05:59:11.000: E/MediaPlayer(561): Unable to to create media player
    08-27 05:59:11.000: E/CameraService(561): Failed to load CameraService sounds.
    08-27 05:59:11.990: E/Camera(738): _getParameters: picture-format=jpeg;picture-size=213x350;preview-format=yuv422sp;preview-frame-rate=15;preview-size=176x144
    08-27 05:59:11.990: E/Camera(738): setParameters()
    08-27 05:59:14.530: E/Camera(738): setParameters()
    : E/(): Device disconnected
4

0 回答 0