Android:實作保存assets圖片(或res下的圖片:R.drawable.image)到手機相冊
設備/引擎:Mac(11.6)/cocos
開發工具:Android studio(4.1.2)
開發語言:java
開發需求:保存圖片到手機相冊
注:本篇講的是如何保存資源中的圖片到手機相冊并實時顯示,與截屏保存到相冊不同
1.獲取資源并直接傳遞到bitmap:
1)assets中的資源:
如果你所需的資源較多,則建議將資源放到asstes中,方便集中使用,獲取資源代碼如下:
AssetManager assetManager = MainActivity.getAssets();
InputStream inputStream = assetManager.open(“image.png”);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
2)res中的資源: R.drawable.image
如果你所需資源不多,且資源檔案已做obb打包處理(有關obb檔案打包,可以翻看之前的文章),則可以將所需的資源放到res/drawable下,代碼如下:
Bitmap bitmap = BitmapFactory.decodeResource(MainActivity.getResources(), R.drawable.image);
2.如果需要添加圖片保存成功的提示,則需要加一個回呼函式來完成提示操作,代碼如下:
new Thread(new Runnable() {
@Override
public void run() {
boolean isSaveeSuccess = saveImageToGallery(bitmap,MainActivity);
if (isSaveeSuccess){
Looper.prepare();
Toast.makeText(joylandInstance,"保存成功.",Toast.LENGTH_LONG).show();
Looper.loop();
}else{
Looper.prepare();
Toast.makeText(joylandInstance,"保存失敗.",Toast.LENGTH_LONG).show();
Looper.loop();
}
}
}).start();
3.獲取手機相冊路徑,代碼如下:
public <string> string getDCIM(){
if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
return (string) "";
}
String path = Environment.getExternalStorageDirectory().getPath() + "/dcim";
if (new File(path).exists()){
return (string) path;
}
path = Environment.getExternalStorageDirectory().getPath() + "/DCIM";
File file = new File(path);
if (!file.exists()){
if (!file.mkdir()){
return (string) "";
}
}
return (string) path;
}
此處目的是為了獲取手機相冊路徑,代碼直接復制即可,
4.保存圖片到相冊,代碼如下:
這里設定為boolean,主要是需要回傳圖片保存結果成功與否,如果不需要的話,可以直接設定為void,
public boolean saveImageToGallery(Bitmap bitmap,Activity activity) {
File appDir = new File((String) getDCIM()); //獲取手機相冊路徑
if (!appDir.exists()){
appDir.mkdir();
}
//獲取當前時間,標識不同時間保存的圖片
String fileName = System.currentTimeMillis() +".jpg";
File file = new File(appDir,fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
boolean isSuccess = bitmap.compress(Bitmap.CompressFormat.JPEG,100,fos);
fos.flush();
fos.close();
//通知圖庫更新,必須添加,否則相冊無法更新新添加的圖片
Uri uri = Uri.fromFile(file);
joylandInstance.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
//回傳圖片保存結果
if (isSuccess) {
return true;
} else {
return false;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
5.將檔案插入到系統圖庫,代碼如下:
try {
MediaStore.Images.Media.insertImage(MainActivity.getContentResolver(),
file.getAbsolutePath(), fileName, null);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
6.通知圖庫更新,代碼如下,4中已表明:
Uri uri = Uri.fromFile(file);
joylandInstance.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
以上就是關于如何讓用戶通過點擊將工程資源中圖片保存到手機相冊中的所有相關代碼,用戶操作部分需根據自身的代碼來撰寫,這里不做詳述,
希望能給大家帶來幫助!!!有什么問題需要討論的可以評論私信歡迎討論~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/397619.html
標籤:其他
下一篇:【Java基礎】1.Java入門
