私は現在、ギャラリーから画像を受け取るためのインテント フィルターを持つ Android アプリケーションを持っています。ユーザーが選択したのと同じ順序で画像を受信することが重要です。これは、ほとんどのデバイスでデフォルトの動作のようですが、一部のデバイスではそうです (これまでのところ、Motorola で実行されている Android 4.x でこれを見てきました)。順序は未定義のようです。画像を順番に受け取る必要があることを意図して宣言する方法を知っている人はいますか? または、画像を受信して選択した順序を決定する方法はありますか?
マニフェストからの関連コードは次のとおりです
<activity
android:label="@string/app_name"
android:name=".activities.ImportImagesActivity" >
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity>
そして ImportImagesActivity から
private List<Uri> parseIncomingData() {
List<Uri> uriList = null;
Intent intent = this.getIntent();
if(intent != null) {
String action = intent.getAction();
//Single Image
if (action.equalsIgnoreCase("android.intent.action.SEND")) {
//removed for brevity
}
}
//Multiple Images
else if (action.equalsIgnoreCase("android.intent.action.SEND_MULTIPLE")) {
uriList = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
}
}
//more code - at this point images have been recieved
return uriList;
}
編集
少し背景を説明するために、アプリの一般的な流れを説明しましょう。ユーザーはギャラリーを開き、画像を選択します。彼らは私のアプリでそれらを「共有」することを選択します。私のアプリケーションは Uri のリストを受け取り、カスタム アダプター クラスに裏打ちされた内部ギャラリーを使用して表示されます。画像は Uri リストに基づいて正しく表示されます。問題は List<Uri> の順序が間違っている場合があることです。画像が選択した順序で表示されることは、ユーザーにとって重要です。
明確化 ギャラリーという用語を使用する場合、組み込みの Android アプリ ギャラリーを指しています。「共有」という用語を使用する場合、ギャラリー アプリ内の [共有] ボタンを指しています。これにより、ユーザーは Facebook、E メール、この場合は my app などのサービスのリストから選択できます。
たとえば、A、B、C の任意の順序で表示される 3 つの画像を含むギャラリーを想像してください。ユーザーは最初に C、次に A、B を選択し、それらをアプリと共有することを選択します。ほとんどの電話では、私のリストは {C、A、B} の順序で正しく並べられますが、問題のある電話では、この順序はランダムに見えます。
作成時間は通常、選択順序とは無関係であるため、作成タイムスタンプは使用できません。カスタム メタ データを追加しても、正しい初期順序がわからないため、役に立ちません。