2016-06-23 5 views
0

私のアプリケーションでは、アップロードする画像を選択することができます。ユーザーがピカサのアルバムから画像を選択すると、データの意図がdat=content://com.sec.android.gallery3d.provider/picasa/item/...に戻ります。マシュマロデバイスでPicasaイメージフォルダを取得するにはどうすればよいですか?

明らかに、picasaフォルダから画像を選択するときは、in this answerとは違った画像を取得する必要があります。

しかし、修正プログラムを実装する前に、修正プログラムが実際に動作することを確認できるようにクラッシュを再現できるようにしたいと考えています。 PicasaがGoogleによって殺されたので、新しい(マシュマロ)AndroidテストデバイスでPicasaフォルダを取得するにはどうすればよいですか?

+0

あなたはファイルエクスプローラのAndroidデバイスモニタを使用してフォルダを作成することができます。 (デバイスマネージャとSDKマネージャの横にある小さなアンドロイドのアイコン) –

答えて

0

ファイルをインテント内で取得する最も保証された方法は、ストリームを開いてアプリのプライベートフォルダにコピーすることです。

この方法は、ローカルファイル、content uri、picasa、すべてのために機能します。そのような

何か:

private File getSharedFile() { 
    Uri uri = intent.getExtras().getParcelable(Intent.EXTRA_STREAM); 
    // or using the new compat lib 
    Uri uri = ShareCompat.IntentReader(this).getStream(); 

    InputStream is = null; 
    OutputStream os = null; 

    try { 
     File f = ... define here a temp file // maybe getCacheDir(); 
     is = getContentResolver().openInputStream(uri); 
     os = new BufferedOutputStream(new FileOutputStream(f)); 

     int read; 
     byte[] bytes = new byte[2048]; 

     while ((read = is.read(bytes)) != -1) { 
      os.write(bytes, 0, read); 
     } 
     return f; 
     } catch (Exception e) { 
      ... handle exceptions, buffer underflow, NPE, etc 
     } finally { 
      try { is.close(); } catch (Exception e) { /* u never know */ } 
      try { 
      os.flush(); 
      os.close(); 
      } catch (Exception e) { /* seriously can happen */ } 
     } 
     return null; 
} 
+0

ありがとうございました。これをテストしたいのですが、Picasaフォルダから画像を選択してクラッシュを再現できるようになった後で、私の元の質問に対する答えを知っていますか? –

+0

'com.sec.android'は古いSamsungデバイスからのものです。私はそれを再現するためにはギャラクシーS3が必要だと思います。私はあなたの懸念を本当に理解していますが、私が働いているアプリは毎月平均7万人のアクティブユーザーを世界中から受けており、その中核機能の1つは受信意図の画像を受信することです。私を信じて、私があなたに渡したこのコードはうまくいくでしょう。 – Budius

+0

PS:上記のコードは、ネットワークI/O操作であることが多いI/O操作です。あなたは絶対にUIスレッドでそれを行うことはできません。 – Budius

関連する問題