Android截取当前屏幕图片并且保存到本地

安卓屏幕截图与保存

截取屏幕


//截取屏幕
public void screenShort() {
    View dView = getWindow().getDecorView();
    dView.setDrawingCacheEnabled(true);
    dView.buildDrawingCache();
    Bitmap bitmap = Bitmap.createBitmap(dView.getDrawingCache());
    if (bitmap != null) {
        try {
            saveBitmap(bitmap);
        } catch (Exception e) {
        }
    }
}


然后是保存到本地相册

private void saveBitmap(Bitmap bmp) throws IOException {
    File childFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    File imageFile = new File(childFolder.getAbsolutePath() + "/" + System.currentTimeMillis
            () + ".jpg");
    OutputStream fOut = new FileOutputStream(imageFile);
    bmp.compress(Bitmap.CompressFormat.JPEG, 60, fOut);
    fOut.flush();
    fOut.close(); 
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(imageFile)));
}

最重要的是别忘了权限的问题


    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


在 Unity for Android 平台上实现将图片保存到设备本地存储,通常需要以下几个步骤:截图保存为文件、刷新图库以确保图片能够立即显示在设备相册中。 ### 截图保存为 PNG 文件 首先,可以通过 `Texture2D` 对象截取当前屏幕画面,并将其编码为 PNG 格式,然后保存到设备的存储路径中。以下是一个完整的代码示例: ```csharp using System.IO; using UnityEngine; using System.Collections; public class ScreenshotSaver : MonoBehaviour { // 调用此方法以保存截图 public void SaveScreenshot(string fileName) { StartCoroutine(UploadPNG(fileName)); } private IEnumerator UploadPNG(string fileName) { // 等待当前帧结束,确保屏幕更新 yield return new WaitForEndOfFrame(); // 获取屏幕分辨率 int width = Screen.width; int height = Screen.height; // 创建 Texture2D 用于存储屏幕截图 Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false); tex.ReadPixels(new Rect(0, 0, width, height), 0, 0); tex.Apply(); // 将 Texture2D 编码为 PNG 字节数据 byte[] bytes = tex.EncodeToPNG(); GameObject.Destroy(tex); // 确定保存路径 string path = PathForFile(fileName); // 保存文件到本地 File.WriteAllBytes(path, bytes); // 刷新图库 RefreshMediaScanner(path); } // 根据平台确定文件路径 private string PathForFile(string fileName) { string path = ""; #if UNITY_ANDROID && !UNITY_EDITOR path = Application.persistentDataPath + "/" + fileName; #else path = Application.dataPath + "/" + fileName; #endif return path; } // 刷新 Android 图库 private void RefreshMediaScanner(string filePath) { #if UNITY_ANDROID && !UNITY_EDITOR AndroidJavaClass playerActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = playerActivity.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaClass mediaScannerConnection = new AndroidJavaClass("android.media.MediaScannerConnection"); AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext"); string[] paths = new string[] { filePath }; string[] mimeTypes = new string[] { "image/png" }; mediaScannerConnection.CallStatic("scanFile", context, paths, mimeTypes, null); #endif } } ``` ### 说明 - `UploadPNG` 方法用于截取屏幕保存为 PNG 文件。 - `PathForFile` 方法根据平台返回合适的文件路径。在 Android 上,使用的是 `Application.persistentDataPath`。 - `RefreshMediaScanner` 方法调用 Android 的 `MediaScannerConnection` 来刷新图库,使图片立即出现在相册中[^1]。 ### Android 权限 为了确保应用可以写入外部存储,必须在 `AndroidManifest.xml` 文件中添加以下权限: ```xml <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` 从 Android 6.0(API 23)开始,还需要在运行时请求权限。可以使用 Unity 的 `AndroidPermissions` 插件或自定义 Java 代码来处理权限请求。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值