2012-01-26 38 views
6

Tôi có một ứng dụng chụp ảnh màn hình và chia sẻ mục này với mục đích chia sẻ. Thay vì lưu nhiều hình ảnh mỗi khi người dùng muốn chỉ chia sẻ hình ảnh. Dưới đây là đoạn code tôi sử dụng cho hình ảnh lưu vào SDAndroid: Chia sẻ Bitmap chưa được lưu vào SD

Intent share = new Intent(Intent.ACTION_SEND); 
share.setType("image/png"); 

dir = "file://" + Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "Folder/" + location; 
share.putExtra(Intent.EXTRA_STREAM, Uri.parse(dir)); 

startActivity(Intent.createChooser(share, "Share Image")); 

Tuy nhiên tôi không thể tìm ra cách để chỉ cần lưu một Bitmap như ...

share.putExtra(Intent.EXTRA_STREAM, theBitmap); 

Có cách nào để làm điều này mà không cần lưu hình ảnh?

Cảm ơn

Trả lời

4

Điều tôi đã thực hiện là lưu một hình ảnh "Nhiệt độ" vào SD/Điện thoại và chỉ ghi đè mỗi lần.

+0

Đây là những gì tôi đã làm quá, nhưng tôi không muốn phải sử dụng thẻ SD (và yêu cầu quyền đọc/ghi lưu trữ bên ngoài). Có vẻ như sẽ có cách để làm điều này với bộ nhớ trong. – Suragch

+0

Câu Hỏi & Đáp này đáng đọc http://stackoverflow.com/questions/9049143/android-share-intent-for-a-bitmap-is-it-possible-not-to-save-it-prior-sharing – Suragch

-1

Có, bạn có thể gửi hình ảnh mà không phải lưu tệp dưới dạng tệp. Từ chỉ nhìn vào mã bạn được đăng tôi không có ý tưởng như thế nào bạn gửi hình ảnh nhưng bạn chuyển đổi các tập tin như sau:

   ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
       byte[] data; 
       if(yourBitmap!=null){ 
       yourBitmap.compress(CompressFormat.PNG, 75, bos); 
       }else if (yourBitmap==null){ 
        Log.w("Image going to server is null","Lost in memory"); 
       } 
       try{ 
       data = bos.toByteArray(); 

Tôi không biết nếu bạn gửi ảnh để người dùng khác thông qua ứng dụng của bạn hoặc những gì mà thats cách tôi sử dụng nó tải lên một máy chủ. Khi bạn thực hiện xong với hình ảnh, bạn sẽ vô hiệu hóa nó như thế này.

   bos = null; 
       data = null; 
       yourBitmap = null; 
+0

Xin chào, Vấn đề của nó nhiều hơn với share.putExtra (Intent.EXTRA_STREAM, Uri.parse (dir)) giả sử là gì thay vì Uri? – Chris

+0

Tôi không thể có được điều này để làm việc, tôi đã thử share.putExtra (Intent.EXTRA_STREAM, dữ liệu) tuy nhiên không có gì gắn và dữ liệu không phải là null. Bất kỳ ý tưởng? – Chris

+0

Bạn đang sử dụng ý định gửi mảng byte như thế nào? Từ những gì tôi hiểu bạn không thể chỉ đưa mọi thứ vào một mục đích và làm cho họ được thực hiện tự động để nói chuyện. Bạn thường sử dụng ý định khởi chạy một hoạt động khác hoặc sử dụng nó để khởi chạy một dịch vụ. Tôi nghĩ có lẽ bạn nên xem xét đính kèm tệp vào email hoặc văn bản thông qua mục đích vì sau khi đọc bài đăng của bạn ngay bây giờ mà tôi đã có một số giấc ngủ, có vẻ như bạn cần tạo hình ảnh, sử dụng tham chiếu đến dữ liệu và đính kèm tham chiếu của nó với ý định và sau đó sử dụng startActivity. Im ra cửa vào lúc này vì vậy tôi hy vọng rằng giúp đỡ –

1

Hãy thử sử dụng cái này:

Intent shareIntent = new Intent(); 
shareIntent.setAction(Intent.ACTION_SEND); 
Uri uri = Uri.parse("android.resource://com.your.app/drawable/" + yourimage); 
shareIntent.putExtra(Intent.EXTRA_STREAM, uri); 
shareIntent.putExtra(Intent.EXTRA_TEXT, shareImage); 
shareIntent.setType("image/*"); 
startActivity(Intent.createChooser(shareIntent, "Send your image")); 

Mã này hoạt động tốt cho tôi để gửi drawables mà tôi sử dụng trong ứng dụng của tôi. Không có ảnh nào được lưu trên thẻ sd. Vấn đề duy nhất là nó không hoạt động với một số ứng dụng xã hội:/

+0

nó chỉ có thể rút từ ứng dụng của bạn, hy vọng điều này sẽ hữu ích. –

+0

Nhưng điều này không giúp ích cho những hình ảnh mới mà bạn tạo bằng ứng dụng của mình. – Suragch

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