我创建了一个意图选择器,用于从图库或相机中选择任何图像。它在模拟器和其他设备上工作正常,但是当我使用redmi note 4测试它时,它显示“没有应用程序可以执行此操作”。
代码在这里-
try {
f = createImageFile();
outputFileUri = Uri.fromFile(f);
grantUriPermission("com.android.camera", outputFileUri,
Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
List<Intent> allIntents = new ArrayList<>();
if (outputFileUri != null) {
Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
List<ResolveInfo> listCam = getPackageManager().queryIntentActivities(captureIntent, 0);
for (ResolveInfo res : listCam) {
Intent intent = new Intent(captureIntent);
intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
intent.setPackage(res.activityInfo.packageName);
if (outputFileUri != null)
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
allIntents.add(intent);
}
}
allIntents.addAll(getGalleryIntents(getPackageManager(), false));
Intent target;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
target = new Intent();
else {
target = allIntents.get(allIntents.size() - 1);
allIntents.remove(allIntents.size() - 1);
}
Intent chooserIntent = Intent.createChooser(target, "Select Source");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, allIntents.toArray(new Parcelable[allIntents.size()]));
startActivityForResult(chooserIntent, REQ_PICK_IMAGE);
} catch (IOException e) {
e.printStackTrace();
f = null;
outputFileUri = null;
}
public static List<Intent> getGalleryIntents(@NonNull PackageManager packageManager, boolean includeDocuments) {
List<Intent> intents = new ArrayList<>();
Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
galleryIntent.setType("image/*");
List<ResolveInfo> listGallery = packageManager.queryIntentActivities(galleryIntent, 0);
for (ResolveInfo res : listGallery) {
Intent intent = new Intent(galleryIntent);
intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
intent.setPackage(res.activityInfo.packageName);
intents.add(intent);
}
if (!includeDocuments) {
for (Intent intent : intents) {
if (intent.getComponent().getClassName().equals("com.android.documentsui.DocumentsActivity")) {
intents.remove(intent);
break;
}
}
}
return intents;
}
private File createImageFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = JPEG_FILE_PREFIX + timeStamp + "_";
File albumF = getAlbumDir();
File imageF = File.createTempFile(imageFileName, JPEG_FILE_SUFFIX, albumF);
return imageF;
}
abstract class AlbumStorageDirFactory {
public abstract File getAlbumStorageDir(String albumName);
}
public final class BaseAlbumDirFactory extends AlbumStorageDirFactory {
// Standard storage location for digital camera files
private static final String CAMERA_DIR = "/dcim/";
@Override
public File getAlbumStorageDir(String albumName) {
return new File(Environment.getExternalStorageDirectory() + CAMERA_DIR + albumName);
}
}
public final class FroyoAlbumDirFactory extends AlbumStorageDirFactory {
@Override
public File getAlbumStorageDir(String albumName) {
return new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName);
}
}
private File getAlbumDir() {
File storageDir = null;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
storageDir = mAlbumStorageDirFactory.getAlbumStorageDir(getAlbumName());
if (storageDir != null)
if (!storageDir.mkdirs())
if (!storageDir.exists()) {
Log.d("CameraSample", "failed to create directory");
return null;
}
} else Log.v(getString(R.string.app_name), "External storage is not mounted READ/WRITE.");
return storageDir;
}
请帮帮我!我错过什么了吗?
我遇到了同样的问题,但后来我意识到这是存储权限问题。我通过添加if条件来修改我的代码。
试试这个
image_layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
isImageSelect =false;
//checking if permission is granted for write_external_storage
if(ActivityCompat.checkSelfPermission(NewMemberActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)== PackageManager.PERMISSION_GRANTED){
selectImage();
}
else{
//Requesting Permission for write_external_storage
ActivityCompat.requestPermissions(NewMemberActivity.this,new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}
}
});
编辑:我调试了应用程序,并用初始化了。这消除了错误,但是现在ImageView没有得到更新,但是当我从Gallery中选择image时,它已经更新了。
我必须做一个按钮,将提供从画廊或从相机选择图像。 结果是有效的。如果我从图库中选择,图像查看器将查看它,如果我选择从相机拍照,它也有效。问题是,在我的show FileChooser()方法中,我所有的意图都在同时运行,所以当我从图库中选择时,相机仍然运行。我选择相机,图库也在打开。我认为我应该在切换案例模式下实现我的代码,但我不明白如何做到这一点。请帮助解决我的初学者问题。
有没有一个标准的方法来调用对话框选择从相机或从图库(如内置电话簿或Skype)的图像? 我看了一下这个,但是代码打开了图库,没有建议从相机中选择它。 设备:Samsung Galaxy Tab Android:2.3.3
我试图从手机的画廊中选择一个图像,并将图像路径传递到另一个活动中,在那里它得到预览的用户。 我在另外两个设备上测试过这个(Moto E和一个叫酷派的东西?)他们似乎都工作得很好。 (调试Android源代码似乎不是一个可行的选择。) 在main活动中,在UI触发器上,我用以下代码启动了gallery picker: 我这样处理结果: 一旦获得存储在全局变量中的文件路径,就会调用以下方法: 现在我已
我试图显示一个对话框,在那里按下图像按钮,然后从图库中选择图片或从相机中拍摄一些图片。我已经在努力选择一个图像并将其插入到正确的图像视图中。 现在,单击ImageButton(android:id=“@ id/imageSelect”)将显示对话框,然后选择从图库中选择,但它将图像插入(android:id=“@ id/imageSelect1),应该插入到(android:id=”@ id/im
和onActivityResult 和错误的堆栈跟踪 stack_trace=java.lang.runtimeException:未能将结果ResultInfo{who=null,request=1,result=-1,data=intent{act=inline-data(havs extras)}}传递到活动{com.madhours/com.madhours.activities.acti