这是我的壁纸应用程序代码。用户抱怨应用程序在按下保存到SD时崩溃,但它在我的nexus 4和htc amaze上工作正常。最常见的问题来自三星设备,如音符n700和s4以及其他一些主要是三星。
//called when pressed save to sd button
bmImg = BitmapFactory.decodeResource(getResources(),
R.drawable.m0);
saveMyImage(" image0", bmImg);
////////////////////////////
///this is my method contains all code
void saveMyImage(String imageName, Bitmap bmImg) {
String appName = "Wallpapers";
File filename;
try {
String path1 = Environment.getExternalStorageDirectory().toString();
if(android.os.Build.DEVICE.contains("Samsung") || android.os.Build.MANUFACTURER.contains("Samsung")){
path1 = path1 + "/storage/extSdCard";
}
// String path1 = android.os.Environment.getExternalStorageDirectory()
// .toString();
File file = new File(path1 + "/" + appName);
if (!file.exists())
file.mkdirs();
filename = new File(file.getAbsolutePath() + "/" + imageName
+ ".jpg");
FileOutputStream out = new FileOutputStream(filename);
//
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
//
bmImg.compress(Bitmap.CompressFormat.JPEG, 75,
byteArrayOutputStream);
//out.flush();
byte[] bsResized = byteArrayOutputStream.toByteArray();
out.write(bsResized);
//
out.close();
ContentValues image = new ContentValues();
image.put(Images.Media.TITLE, appName);
image.put(Images.Media.DISPLAY_NAME, imageName);
image.put(Images.Media.DESCRIPTION, "App Image");
image.put(Images.Media.DATE_ADDED, System.currentTimeMillis());
image.put(Images.Media.MIME_TYPE, "image/jpg");
image.put(Images.Media.ORIENTATION, 0);
File parent = filename.getParentFile();
image.put(Images.ImageColumns.BUCKET_ID, parent.toString()
.toLowerCase().hashCode());
image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, parent.getName()
.toLowerCase());
image.put(Images.Media.SIZE, filename.length());
image.put(Images.Media.DATA, filename.getAbsolutePath());
Uri result = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, image);
Toast.makeText(getApplicationContext(),
"File is Saved in " + filename, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}