2016-10-01 13 views
0

ストレージアクセスフレームワークを使用してイメージを選択し、それらをサーバーにアップロードしようとしています。
私が遭遇している問題は、ファイルを選択した後に重複を含む結果が得られることです。
フォルダに279枚の写真があります。
ACTION_OPEN_DOCUMENTは279件の結果を返しますが、その中には重複しているものがありますので、時々私は275回、時には268回などがあります。 重複はランダムに表示されるため、特定のファイルではありません。ここでストレージアクセスフレームワークでACTION_OPEN_DOCUMENTが重複した結果を返します

はコードです:

int PICKER_CODE = 123; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
      intent.addCategory(Intent.CATEGORY_OPENABLE); 
      intent.setType("image/*"); 
      intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); 

      if (intent.resolveActivity(getPackageManager()) != null) { 
       startActivityForResult(Intent.createChooser(intent, 
         "Select images"), PICKER_CODE); 
      } 

     } 
    }); 
} 

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

    if (resultCode != Activity.RESULT_OK) { 
     Toast.makeText(this, "Nothing was chosen", Toast.LENGTH_LONG).show(); 
     return; 
    } 

    if (requestCode == PICKER_CODE) { 

     ClipData clipData = data.getClipData(); 

     if (clipData != null) { 

      Set<Uri> uniqueUris = new HashSet<>(); 

      for (int i = 0; i < clipData.getItemCount(); i++) { 
       Uri photoUri = clipData.getItemAt(i).getUri(); 

       uniqueUris.add(photoUri); 

       Log.i("IMAGE PICKER", "photo: " + photoUri); 
      } 

      String stats = 
        "all: " + clipData.getItemCount() 
          + ", unique: " + uniqueUris.size(); 

      Log.i("IMAGE PICKER", "stats: " + stats); 

      Toast.makeText(this, stats, Toast.LENGTH_LONG).show(); 

      TextView textView = (TextView) findViewById(R.id.output_text); 
      textView.setText(stats); 
     } 
    } 

}

活動の完全なコードはここにある:ここでhttps://github.com/Leonti/android-saf-duplicates/blob/master/app/src/main/java/com/example/leonti/googledriveduplicatesdebugging/MainActivity.java

は、あなたが問題を再現できるサンプルのAndroidアプリです。 https://github.com/Leonti/android-saf-duplicates ちょうどそれを電話機にインストールして、いくつかの画像を選択すると(より良いものになると)、それは合計カウントとユニークなエントリの数を示します。

Googleドライブや写真から写真を選択しても問題はありません。ほとんどの場合、結果は重複します。

何がうまくいかないのか分かりません。 Androidエミュレータで同じコードを実行しました(別のアカウントを使用してこのGoogleドライブのフォルダを共有しました)、期待どおりに動作しています。すべての結果は一意です。

私は任意のヘルプのAndroid 7.0

ネクサス5Xに感謝を実行していますよ!

+0

:アンドロイド6.0エミュレータ

は、ここでは、バグレポートを作成しましたか? Clipdataまたは作成した配列リストの1つにありますか? – greenapps

+0

このような大きなリストを投稿することは意味がありません。私たちはそれを調べなければなりませんか?どうすればそれをしなければならないでしょうか? – greenapps

+0

Clipdataから配列を作成しているので、クリップデータと配列の両方に重複があります。 @greenapps参照用にリストを含めましたが、誰もそれを調べる必要はありません。重大な部分は重複していることです。しかし、実際の結果が関連していると考える人は、http://www.somacon.com/p568.phpのようなオンラインツールを使用して重複を確認したり、パターンを確認したりすることができます。 – Leonti

答えて

1

Android Nougatのバグのようです。
私は多分それが「仮想ファイルは、」ヌガーSAFで導入するために何らかの形で接続されます
(Google APIの24)(ネクサス5X)自分の携帯電話でそれを再現することができましたし、エミュレータ上: https://developer.android.com/about/versions/nougat/android-7.0.html#virtual_files

に期待どおりに動作しますあなたが重複を参照してくださいかhttps://code.google.com/p/android/issues/detail?id=224592

+0

このバグはAndroid 7.1 betaで修正されています:) – Leonti

関連する問題