2011-11-24 10 views
10

ImageViewに共有の意図があります(これはうまくいけば、画像を共有できるすべてのアプリケーションが表示されます)。ただし、電話にパスがないので写真を共有できません。私の電話にImageViewを保存するにはどうすればいいですか?以下は私のコードです。ImageViewをイメージとして保存するにはどうすればよいですか?

public void taptoshare(View v) 
{ 
    View content = findViewById(R.id.myimage); 
    content.setDrawingCacheEnabled(true); 
     Bitmap bitmap = content.getDrawingCache(); 
     File file = new File("/DCIM/Camera/image.jpg"); 
     try 
     { 
      file.createNewFile(); 
      FileOutputStream ostream = new FileOutputStream(file); 
      bitmap.compress(CompressFormat.JPEG, 100, ostream); 
      ostream.close(); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 


    Intent shareIntent = new Intent(Intent.ACTION_SEND); 
    Uri phototUri = Uri.parse("/DCIM/Camera/image.jpg"); 
    shareIntent.setData(phototUri); 
    shareIntent.setType("image/*"); 
    shareIntent.putExtra(Intent.EXTRA_STREAM, phototUri); 
    startActivity(Intent.createChooser(shareIntent, "Share Via")); 

} 
} 

UPDATE OK]をので、私はそれを考え出しました。今私は新しい質問があります。この画像を新しいフォルダに保存するにはどうすればいいですか?

+0

1つの質問に対して複数の回答を与えることはできないため、新しい質問を別々に行う必要があります。しかし、とにかく、Fileには、指定されたフォルダが存在することを確認するために使用できるmkdirs()メソッドがあります。 – AlbeyAmakiir

+0

ああ、ありがとう@AlbeyAmakiir!将来の投稿に注目! – dabious

答えて

4

保存して読み込むときは、まずシステムのルートパスを取得する必要があります。これが私のやり方です。

File root = Environment.getExternalStorageDirectory(); 
File cachePath = new File(root.getAbsolutePath() + "/DCIM/Camera/image.jpg"); 
+0

私はそれを追加しましたが、まだ動作していません。 – dabious

+0

それは今作動する!本当にありがとう!! – dabious

+2

@dabiousは、あなたが働く解決策を分かち合うことができます。 – User404

1

私はこの問題を解決していないいくつかの解決策を見つけました。

私のために働いた解決策はここにあります。 1つは、共有または非プライベートの場所に画像を保存する必要があるということです(http://developer.android.com/guide/topics/data/data-storage.html#InternalCache

Appsの「プライベート」キャッシュの場所に保存すると多くの提案がありますが、もちろんこれには他の外部アプリケーションからアクセスできません利用されている一般的な共有ファイルのインテント。これを試してみると、実行されますが、例えばdropboxはそのファイルが利用できなくなったことを伝えます。

/*ステップ1 - 以下のファイル保存機能を使用してビットマップファイルをローカルに保存します。 */

localAbsoluteFilePath = saveImageLocally(bitmapImage); 

/* STEP 2 - 共有ファイルの意図に非プライベートの絶対ファイルパスを共有する*/

if (localAbsoluteFilePath!=null && localAbsoluteFilePath!="") { 

    Intent shareIntent = new Intent(Intent.ACTION_SEND); 
    Uri phototUri = Uri.parse(localAbsoluteFilePath); 

    File file = new File(phototUri.getPath()); 

    Log.d("file path: " +file.getPath(), TAG); 

    if(file.exists()) { 
     // file create success 

    } else { 
     // file create fail 
    } 
    shareIntent.setData(phototUri); 
    shareIntent.setType("image/png"); 
    shareIntent.putExtra(Intent.EXTRA_STREAM, phototUri); 
    activity.startActivityForResult(Intent.createChooser(shareIntent, "Share Via"), Navigator.REQUEST_SHARE_ACTION); 
} 

/* SAVEのイメージ関数*/

private String saveImageLocally(Bitmap _bitmap) { 

     File outputDir = Utils.getAlbumStorageDir(Environment.DIRECTORY_DOWNLOADS); 
     File outputFile = null; 
     try { 
      outputFile = File.createTempFile("tmp", ".png", outputDir); 
     } catch (IOException e1) { 
      // handle exception 
     } 

     try { 
      FileOutputStream out = new FileOutputStream(outputFile); 
      _bitmap.compress(Bitmap.CompressFormat.PNG, 90, out); 
      out.close(); 

     } catch (Exception e) { 
      // handle exception 
     } 

     return outputFile.getAbsolutePath(); 
    } 

/* STEP 3 - 共有ファイルの意図の結果を処理します。私はそれが誰かを役に立てば幸い*/

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

      // deal with this with whatever constant you use. i have a navigator object to handle my navigation so it also holds all mys constants for intents 
     if (requestCode== Navigator.REQUEST_SHARE_ACTION) { 
      // delete temp file 
      File file = new File (localAbsoluteFilePath); 
      file.delete(); 

      Toaster toast = new Toaster(activity); 
      toast.popBurntToast("Successfully shared"); 
     } 


    } 

/* UTILS */

public class Utils { 
    //... 
    public static File getAlbumStorageDir(String albumName) { 

     // Get the directory for the user's public pictures directory. 
     File file = 
      new File(Environment.getExternalStorageDirectory(), albumName); 
     if (!file.mkdirs()) { 
      Log.e(TAG, "Directory not created"); 
     } 
     return file; 
    } 
    //... 
} 

などへのリモートの一時ファイルが必要です。

+0

私はstep2で間違っています(utilsとは何ですか?):outputDir = Utils.getAlbumStorageDir(Environment.DIRECTORY_DOWNLOADS); –

+0

@DinIslamMilon、申し訳ありませんが、これに取り組んでからしばらくお待ちください。私は、私が使用するカスタムutils静的クラスを追加しました。それはユーザーの写真のディレクトリを取得します – wired00