diff --git a/src/main/java/net/micode/notes/ui/NotesListActivity.java b/src/main/java/net/micode/notes/ui/NotesListActivity.java index b04a6fb..11790f2 100644 --- a/src/main/java/net/micode/notes/ui/NotesListActivity.java +++ b/src/main/java/net/micode/notes/ui/NotesListActivity.java @@ -28,6 +28,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; +import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.preference.PreferenceManager; @@ -83,6 +84,8 @@ import net.micode.notes.widget.NoteWidgetProvider_2x; import net.micode.notes.widget.NoteWidgetProvider_4x; import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -218,13 +221,19 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt // 处理从相册选择图片的结果 if (data != null && data.getData() != null) { try { - // 保存图片路径 - mCurrentBackgroundType = BACKGROUND_TYPE_ALBUM; - mCurrentBackgroundPath = data.getData().toString(); - // 更新背景 - updateBackground(); - // 保存设置 - saveBackgroundSetting(); + // 将相册图片复制到应用内部存储 + String internalPath = saveImageToInternalStorage(data.getData()); + if (!TextUtils.isEmpty(internalPath)) { + // 保存内部存储路径 + mCurrentBackgroundType = BACKGROUND_TYPE_ALBUM; + mCurrentBackgroundPath = internalPath; + // 更新背景 + updateBackground(); + // 保存设置 + saveBackgroundSetting(); + } else { + Toast.makeText(this, "图片保存失败", Toast.LENGTH_SHORT).show(); + } } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "图片加载失败", Toast.LENGTH_SHORT).show(); @@ -1640,8 +1649,17 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } else if (BACKGROUND_TYPE_ALBUM.equals(mCurrentBackgroundType) && !TextUtils.isEmpty(mCurrentBackgroundPath)) { // 使用相册图片作为背景 try { - android.graphics.Bitmap bitmap = android.graphics.BitmapFactory.decodeStream( - getContentResolver().openInputStream(android.net.Uri.parse(mCurrentBackgroundPath))); + android.graphics.Bitmap bitmap = null; + // 检查路径类型 + if (mCurrentBackgroundPath.startsWith("content://")) { + // 如果是URI字符串 + bitmap = android.graphics.BitmapFactory.decodeStream( + getContentResolver().openInputStream(android.net.Uri.parse(mCurrentBackgroundPath))); + } else { + // 如果是内部存储路径 + bitmap = android.graphics.BitmapFactory.decodeFile(mCurrentBackgroundPath); + } + if (bitmap != null) { // 计算屏幕尺寸 android.util.DisplayMetrics displayMetrics = new android.util.DisplayMetrics(); @@ -1750,4 +1768,42 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } }); } + + /** + * 将图片保存到应用内部存储 + * @param uri 图片的URI + * @return 保存后的内部存储路径 + */ + private String saveImageToInternalStorage(Uri uri) { + try { + // 创建内部存储目录 + File directory = new File(getFilesDir(), "backgrounds"); + if (!directory.exists()) { + directory.mkdirs(); + } + + // 创建输出文件 + String fileName = "background_" + System.currentTimeMillis() + ".jpg"; + File outputFile = new File(directory, fileName); + + // 复制图片 + InputStream inputStream = getContentResolver().openInputStream(uri); + FileOutputStream outputStream = new FileOutputStream(outputFile); + + byte[] buffer = new byte[1024]; + int length; + while ((length = inputStream.read(buffer)) > 0) { + outputStream.write(buffer, 0, length); + } + + inputStream.close(); + outputStream.close(); + + // 返回文件路径 + return outputFile.getAbsolutePath(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } }