Arn*_*rno 7 camera android android-intent samsung-touchwiz
我创建了一个选择器,用于从文件中拾取图像或制作图片.
我使用的代码在Nexus 5上工作正常,但是当我在三星S5上试用时,选择器不会显示相机图标.
public Intent makePhotoIntent(String title, Context ctx, String uniqueImageId){
//Build galleryIntent
Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
galleryIntent.setType("image/*");
//Create chooser
Intent chooser = Intent.createChooser(galleryIntent,title);
if (checkexCameraHardware()){
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
mTempImage = null;
try {
mTempImage = createImageFile(uniqueImageId);
} catch (IOException e) {
e.printStackTrace();
}
if (mTempImage != null){
cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTempImage)); //add file ure (photo is saved here)
Intent[] extraIntents = {cameraIntent};
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
}
}
return chooser;
}
Run Code Online (Sandbox Code Playgroud)


当我更改意图添加到选择器的顺序时,三星设备会显示相机,但只显示android-system作为文件选项.
public Intent makePhotoIntent(String title, Context ctx, String uniqueImageId){
//Build galleryIntent
Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
galleryIntent.setType("image/*");
//Create chooser
Intent chooser = Intent.createChooser(galleryIntent,title);
if (checkexCameraHardware()){
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
mTempImage = null;
try {
mTempImage = createImageFile(uniqueImageId);
} catch (IOException e) {
e.printStackTrace();
}
if (mTempImage != null){
cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTempImage)); //add file ure (photo is saved here)
//I have to re-create the chooser here or the Samsung will not show the 'camera' icons.
//I have to add the cameraIntent first.
chooser = Intent.createChooser(cameraIntent,title);
Intent[] extraIntents = {galleryIntent};
//Intent[] extraIntents = {cameraIntent};
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
}
}
return chooser;
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,当我首先添加图库意图时,我希望三星设备显示与Nexus相同的设备.但是我不能让它发挥作用.
如果有额外intent(Intent.EXTRA_INITIAL_INTENTS)的多个意图匹配,它将在"Android系统"下显示它们的所有组合.当您单击"Android系统"时,它将打开另一个具有所有这些意图匹配的选择器.
所以,在你的第一个三星设备截图中,相机确实出现了 - 它刚好在"Android Systeem"下(点击这将显示所有相机意图匹配).
如果您制作galleryIntent额外的而不是相机意图,它将结合"Android Systeem"下的所有图库相关意图(如您在samsung设备的第二个屏幕截图中所示)
如果他不知道这个"Android Systeem"是什么,我想用户可能会感到困惑!
使用以下解决方案,您可以直接将每个添加到您的 chooser
在您的第二个代码段中,替换
Intent[] extraIntents = {galleryIntent};
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
Run Code Online (Sandbox Code Playgroud)
用:
List<Intent> galleryIntents = new ArrayList<Intent>();
PackageManager pm = getApplicationContext().getPackageManager();
for (ResolveInfo ri: pm.queryIntentActivities(galleryIntent, PackageManager.MATCH_DEFAULT_ONLY)) {
Intent intent = pm.getLaunchIntentForPackage(ri.activityInfo.packageName);
intent.setAction(Intent.ACTION_PICK);
galleryIntents.add(intent);
}
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, galleryIntents.toArray(new Parcelable[] {}));
Run Code Online (Sandbox Code Playgroud)这将手动将每个匹配的意图直接添加到您的 chooser
| 归档时间: |
|
| 查看次数: |
17653 次 |
| 最近记录: |