这是清单文件中相关的代码。
<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,电子邮件,在这种情况下是我的应用程序。
例如 想象一下一个包含3个图像的画廊,以任意顺序显示:A、B和C。用户首先选择C,然后选择A,然后选择B,并选择与我的应用程序共享它们。在大多数手机上,我的列表将被正确排序{C,A,B},在某些手机上,此顺序似乎随机。
我无法使用创建时间戳,因为创建时间通常与选择顺序无关。添加自定义元数据也没有帮助,因为我不知道正确的初始顺序。