2017-02-26 8 views
0

私のアプリでは、URLから画像を1つダウンロードする必要があります。私は自分のアプリでその画像をプレビューする必要があり、私は明示的な意図を使用して画像を共有する必要があります。私は次のような2つの問題に直面しました:Androidで画像を表示して他のアプリに共有する

  1. 私は外部記憶装置に画像を保存したくありません。では、sharedpreferences以外のオプションは何ですか? (共有環境設定はイメージのデコードとエンコードに非常に時間がかかります)。キャッシングは良いですか?それが良い場合はどのように私はそれを達成することができますか?

  2. ビットマップをインテントで他のアプリに明示的に送信することはできません(アプリで画像の共有機能について話しています)。だからこそ他の選択肢はありますか?

答えて

1
  1. ダウンロード画像とあなたがアプリケーション間で共有するために、ローカルに保存されたファイルパスのURLを必要とする、あなたのキャッシュディレクトリに

    URL url = new URL("YOUR_URL"); 
    HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
    connection.setDoInput(true); 
    connection.connect(); 
    InputStream input = connection.getInputStream(); Bitmap myBitmap = BitmapFactory.decodeStream(input); 
    String data1 = String.valueOf(String.format("/sdcard/dirname/%d.jpg",System.currentTimeMillis())); FileOutputStream stream = new FileOutputStream(data1); 
    ByteArrayOutputStream outstream = new ByteArrayOutputStream(); myBitmap.compress(Bitmap.CompressFormat.JPEG, 85, outstream); 
    byte[] byteArray = outstream.toByteArray(); stream.write(byteArray); 
    stream.close(); 
    
  2. を保管してください。

    意図インテント=新しいインテント(Intent.ACTION_SEND); intent.setData(Uri.parse(ファイルパス)); startActivity(インテント);

+0

マニフェスト許可が必要ですか? –

+0

ローカルに保存する権限がありません。ただし、Android 6.0以上でイメージを共有しているときにFileProviderファイルパスを使用する必要があるかもしれません。あなたが答えが好きなら、投票してください。 – albeee

+0

あなたのアプリは、ダウンロードしたファイルに対して画像受信者の読み取り許可も与えなければなりません: 'intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);' – k3b

関連する問題