我目前有一个 Android 应用程序,它有一个意图过滤器来接收来自画廊的图像。以用户选择它们的相同顺序接收图像很重要。这似乎是大多数设备上的默认行为,但在某些设备上(到目前为止,我已经在摩托罗拉运行的 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、电子邮件,在本例中是我的应用程序。
例如,想象一个包含 3 张图像的图库,以任意顺序显示:A、B 和 C。用户先选择 C,然后选择 A,然后选择 B,然后选择与我的应用程序共享它们。在大多数手机上,我的列表将正确排序{C,A,B},在违规手机上,这个顺序似乎是随机的。
我不能使用创建时间戳,因为创建时间通常与选择顺序无关。添加自定义元数据也无济于事,因为我不知道正确的初始顺序。