2012-11-15 57 views
8

Tôi muốn chụp ảnh từ máy ảnh và lưu nó vào thư mục bộ nhớ cache của ứng dụng riêng tư. Tôi nhận ra rằng tôi phải cấp cho ứng dụng máy ảnh quyền ghi vào thư mục riêng của mình, vì vậy tôi đã thêm cờ FLAG_GRANT_WRITE_URI_PERMISSION.Lưu hình ảnh từ máy ảnh vào thư mục bộ nhớ cache ứng dụng riêng tư

Điều đang xảy ra là ứng dụng máy ảnh mở ra, tôi có thể chụp ảnh, nhưng khi tôi nhấp vào nút OK, không có gì xảy ra. Ứng dụng máy ảnh vẫn mở. Không có đầu ra nhật ký. Tôi đoán đó là do sự cố về quyền.

private void getCameraImage() { 
    try { 
     mTmpFile = File.createTempFile("tmp", ".jpg", getCacheDir()); 
     Uri imgUri = Uri.fromFile(mTmpFile); 
     Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     i.putExtra(MediaStore.EXTRA_OUTPUT, imgUri); 
     i.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
     // i.setData(imgUri); // if uncommented, i get an ActivityNotFound Exception 
     startActivityForResult(i, REQUEST_CAMERA); 
    } catch (IOException e) { 
     Log.e(TAG, "getCameraImage()", e); 
     Toast.makeText(this, "Something went wrong", Toast.LENGTH_SHORT).show(); 
    } 
} 

Mọi thông tin chi tiết, về cách tôi có thể khắc phục điều đó?

Edit:

Khi tôi thay đổi thư mục vào thẻ SD nào, sau đó nó hoạt động tốt.

mTmpFile = File.createTempFile("tmp", ".jpg", Environment.getExternalStorageDirectory()); 

Cảm ơn Simon

+1

Nếu đó là vấn đề về quyền, lỗi sẽ hiển thị trong LogCat. – PearsonArtPhoto

+0

Không chắc chắn về điều đó. Ngay cả khi tôi xóa cờ FLAG_GRANT_WRITE_URI_PERMISSION, tôi không nhận được bất kỳ kết xuất nhật ký nào. Có thể ứng dụng máy ảnh kiểm tra quyền và chỉ hủy bỏ tác vụ nếu nó không thể ghi tệp. – SimonSays

Trả lời

2

Thay vì đi qua các Uri để lưu trữ các hình ảnh bạn có thể sử dụng http://developer.android.com/reference/android/hardware/Camera.html#takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera. PictureCallback)

và nhận nội dung trong bộ nhớ ứng dụng của bạn. Từ đó bạn sẽ có thể làm bất cứ điều gì bạn muốn.

Đừng quên rằng các ứng dụng máy ảnh đang sử dụng cũng là thư viện và ứng dụng thư viện không được phép kiểm tra thư mục riêng tư của bạn.

+0

Vâng, đây là một cách rất khác nhau để có được hình ảnh hơn những gì tôi dự định. Nó thực sự không phải là câu trả lời cho câu hỏi ban đầu, nhưng vẫn có thể giải quyết vấn đề. Vì tôi không làm việc trên ứng dụng đó nữa và do đó không thể kiểm tra giải pháp, tôi sẽ chỉ tiếp tục và chấp nhận câu trả lời - đó là anyways duy nhất :-) – SimonSays

+0

Cảm ơn rất nhiều vì sự đánh giá cao và có không phải là trực tiếp trả lời cho câu hỏi của bạn nhưng như bạn nói là khả năng duy nhất để làm một cái gì đó mà "thuộc về" chỉ cho ứng dụng của bạn và không cho bất kỳ người nào khác đang sử dụng phương tiện truyền thông. Tôi đã sử dụng phương pháp này một mình ... Cảm ơn – danysz

+0

Giải pháp này đã không được chấp nhận trong API 21 –

Các vấn đề liên quan