之前写过类似的文章,但是目前安卓版本并不支持读写相册路径,安卓现在的权限管理越来越像iOS了,所以就有了今天的文章,这里我会持续更新Unity调用安卓原生功能的脚本,也会有iOS的,方便之后unity调用安卓和iOS。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
package com.genimous.linjing; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.media.MediaScannerConnection; import android.net.Uri; import android.os.Build; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.widget.Toast; import com.unity3d.player.UnityPlayerActivity; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class UnityTools extends UnityPlayerActivity { private static Context mContext = null; private static Activity mainActivity = null; public static void init(Context context) { if (mContext == null) { mContext = context; } if (mainActivity == null) { mainActivity = (Activity) context; } } // 获取App发过来的消息 public static String getAppData(String key) { return mainActivity.getIntent().getStringExtra(key); } // 保存图片到相册 public static void savePhoto(String folder, String fileName) { mainActivity.runOnUiThread(new Runnable() { public void run() { String filePath = Environment .getExternalStorageDirectory() + "/Android/data/" + mContext.getPackageName() + "/files/" + folder; Bitmap bitmap = BitmapFactory.decodeFile(filePath + "/" + fileName); // 首先保存图片 File file = new File(filePath, fileName); try { FileOutputStream fos = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); fos.flush(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } bitmap.recycle();//扫描保存的图片 // 其次把文件插入到系统图库 try { MediaStore.Images.Media.insertImage(mContext.getContentResolver(), file.getAbsolutePath(), folder + "/" + fileName, null); } catch (FileNotFoundException e) { e.printStackTrace(); } // 最后通知图库更新 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // 判断SDK版本是否是4.4或者高于4.4 String[] paths = new String[]{file.getAbsolutePath()}; MediaScannerConnection.scanFile(mContext, paths, null, null); } else { final Intent intent; if (file.isDirectory()) { intent = new Intent(Intent.ACTION_MEDIA_MOUNTED); intent.setClassName("com.android.providers.media", "com.android.providers.media.MediaScannerReceiver"); intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory())); } else { intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); intent.setData(Uri.fromFile(file)); } mContext.sendBroadcast(intent); } Toast.makeText(mContext, "截图已保存到相册", Toast.LENGTH_SHORT).show(); } }); } } |
这个脚本需要先调用一下init,将Unity的Activity初始化一下,然后就可以调用这个脚本里的方法了,这里用到了Android的MediaStore的api,这个api不需要获取权限,这是系统的方法,可以将其他路径的媒体资源移动到系统固定的资源路径下。
后续新的功能会持续更新到这个脚本里文章源自大腿Plus-https://www.zhaoshijun.com/archives/1732 文章源自大腿Plus-https://www.zhaoshijun.com/archives/1732
我的微信
微信扫一扫
shijun_z
我的QQ
QQ扫一扫
846207670
评论