当我将媒体库中的图像加载到位图时,一切都运行正常,除了在垂直拿着手机时用相机拍摄的图片被旋转,以便我总是得到水平图片,即使它在画廊.为什么这样,我怎么能正确加载它?
我正在为Android 2.1开发一个应用程序.我想让我的用户在我的应用程序中选择个人资料图片(我没有使用联系人框架).
理想的解决方案是启动一个使用户能够从图库中选择图像的意图,但如果没有合适的图像,则使用相机拍照(反之亦然,即允许用户拍照,但如果他们知道他们已经有了合适的图像,让他们进入画廊并选择所述图像).
目前我可以做其中一个但不能两个都做.
如果我使用MediaStore.ACTION_IMAGE_CAPTURE直接进入相机模式,则无法进入图库.
如果我使用Intent.ACTION_PICK直接进入图库,那么我可以选择一个图像,但是如果我单击相机按钮(在图库的右上角),则会触发新的相机意图.因此,拍摄的任何照片都不会直接返回给我的应用程序.(当然你可以按后退按钮退回到图库并从那里选择图像,但这是一个额外的不必要的步骤,并不是很直观).
那么有没有办法将两者结合起来,或者我是否必须提供一个菜单来从我的应用程序中做一个或另一个?看起来这将是一个常见的用例...当然我错过了什么?
是否有要求获取多张图片的意图?
我们知道Intent.ACTION_PICK或Intent.ACTION_GET_CONTENT获得单个图像.我们的应用程序也注册为IntentFilter for android.intent.action.SEND和android.intent.action.SEND_MULTIPLE
但是,我们希望我们的应用程序能够使用类似应用程序的Gallery来选择多个图像.有意图吗?
我正在寻找一种Android从意图中打开图库应用程序的方法.
我不想返回图片,而只是打开图库以允许用户使用它,就好像他们从启动器(View pictures/folders)中选择它一样.
我试图做以下事情:
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
然而,一旦我选择了一张图片,这会导致应用程序关闭(我知道这是因为ACTION_GET_CONTENT),但我需要打开图库.
任何帮助都会很棒.
谢谢
正如你可以从标题中注意到的那样,我在Android中将文件写入sdcard时遇到了问题.我已经检查了这个问题,但它没有帮助我.我想写一个将在sdcard上的公共空间中的文件,以便任何其他应用程序都可以读取它.
首先,我检查是否安装了SD卡:
Environment.getExternalStorageState();
Run Code Online (Sandbox Code Playgroud)
然后,我运行此代码:
File baseDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
baseDir.mkdirs();
File file = new File(baseDir, "file.txt");
try {
FileOutputStream out = new FileOutputStream(file);
out.flush();
out.close();
Log.d("NEWFILE", file.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我有:
<manifest>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application>
...
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
在我的AndroidManifest.xml中.
确切的错误是这样的:
java.io.FileNotFoundException: /storage/1510-2908/Download/secondFile.txt: open failed: EACCES (Permission denied)
Run Code Online (Sandbox Code Playgroud)
我正在模拟器上测试我的代码(模拟Nexus5 API 23).我所需的最低SDK版本是19(4.4 Kitkat).
此外,一切正常,使用相同的代码将文件写入SD卡上的私人文件夹,所以我说前代码也应该工作:
File newFile = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), "esrxdtcfvzguhbjnk.txt");
newFile.getParentFile().mkdirs();
try {
FileOutputStream out = new FileOutputStream(newFile);
out.flush();
out.close();
Log.d("NEWFILE", newFile.getAbsolutePath());
} catch (IOException e) …Run Code Online (Sandbox Code Playgroud) 我正在尝试检查位图的方向并在需要时将其翻转,但在应用代码时出错.这是我的代码,而我试图使用ExifInterface翻转图像:
@RequiresApi(api = Build.VERSION_CODES.N)
public void flipping(Bitmap b)
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.JPEG,100, bos);
byte[] bitmapdata = bos.toByteArray();
ByteArrayInputStream bs = new ByteArrayInputStream(bitmapdata);
try {
ExifInterface exif = new ExifInterface(bs);
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_UNDEFINED);
switch(orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
rotateImage(b, 90);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotateImage(b, 180);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotateImage(b, 270);
break;
case ExifInterface.ORIENTATION_NORMAL:
default:
break;
}
encoding();
} catch (IOException e) {
e.printStackTrace();
}
}
public static Bitmap rotateImage(Bitmap source, float angle) {
Matrix matrix = new …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我让用户从他们的图库中选择一张照片 我使用这样的意图:
Intent pickPictureIntent = new Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Run Code Online (Sandbox Code Playgroud)
在我开始这个意图之前,我检查是否有任何应用程序可以处理它:
if (pickPictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
startActivityForResult(pickPictureIntent, SELECT_PICTURE_FROM_GALLERY_REQUEST_CODE);
}
Run Code Online (Sandbox Code Playgroud)
但是当我的两个用户尝试从他们的图库中选择一张照片时会遇到此异常:
Exception android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.PICK dat=content://media/external/images/media }
Run Code Online (Sandbox Code Playgroud)
到目前为止,我知道当没有活动来处理意图时会发生这种情况,但正如你所看到的,我检查了没有活动来处理我的代码中的意图的可能性.
我正在尝试创建一个文件夹并将图像保存在其中.
但它不起作用.
我不知道我的代码有什么问题 - 你能告诉我为什么吗?
// The method that invoke of uploading images
public void openGallery() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK && data != null && data.getData() != null) {
File folder = new File(this.getExternalFilesDir(
Environment.DIRECTORY_PICTURES), "albumName");
File file = new File(this.getExternalFilesDir(
Environment.DIRECTORY_PICTURES), "fileName"+3);
Bitmap imageToSave = (Bitmap) data.getExtras().get("data");
try { …Run Code Online (Sandbox Code Playgroud)