autojs刷新图片的多种姿势

牙叔教程 简单易学

使用场景

下载图片后, 将图片信息刷新到图库

代码讲解

第一种

media.scanFile(filePath);

第二种

app.sendBroadcast(
  new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, android.net.Uri.fromFile(new java.io.File(filePath)))
);

第三种

// 分享者: @七桶
function scanFile(filePath) {
  android.provider.MediaStore.Images.Media.insertImage(
    context.getContentResolver(),
    files.path(filePath),
    files.getNameWithoutExtension(filePath),
    null
  );

  let intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
  let file = new java.io.File(filePath);
  let uri = android.net.Uri.fromFile(file);
  intent.setData(uri);
  context.sendBroadcast(intent);
}

第四种

function scanFile(filePath) {
  log(filePath);
  var filePathArr = java.lang.reflect.Array.newInstance(java.lang.Class.forName("java.lang.String"), 1);
  filePathArr[0] = java.lang.String(filePath);
  android.media.MediaScannerConnection.scanFile(
    context,
    filePathArr,
    null,
    new android.media.MediaScannerConnection.OnScanCompletedListener({
      onScanCompleted: function (path, uri) {
        log("onScanCompleted");
        log("*******", "Scanned " + path + ":");
        log("*******", "-> uri=" + uri);
      },
    })
  );
}

第五种

// 分享者: @Tho 
function saveToMediaStore(img, filePath) {
  // 系统时间
  let mImageTime = new Date().getTime();
  let dateSeconds = mImageTime / 1000;
  // 文件名
  let mImageFileName = files.getName(filePath);
  // 文件路径
  let mImageFilePath = files.path(filePath);
  let file = new java.io.File(mImageFilePath);
  let resolver = context.getContentResolver();
  if (file.exists()) {
    files.remove(mImageFilePath);
    let params = util.java.array("string", 1);
    params[0] = mImageFilePath;
    resolver.delete(
      android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
      android.provider.MediaStore.Images.Media.DATA + " LIKE ?",
      params
    );
  }
  let mImageHeight = img.getHeight();
  let mImageWidth = img.getWidth();
  // 保存截屏到系统MediaStore
  let values = new android.content.ContentValues();
  values.put(android.provider.MediaStore.Images.ImageColumns.DATA, mImageFilePath);
  values.put(android.provider.MediaStore.Images.ImageColumns.TITLE, mImageFileName);
  values.put(android.provider.MediaStore.Images.ImageColumns.DISPLAY_NAME, mImageFileName);
  values.put(android.provider.MediaStore.Images.ImageColumns.DATE_TAKEN, new java.lang.Long(mImageTime));
  values.put(android.provider.MediaStore.Images.ImageColumns.DATE_ADDED, new java.lang.Double(dateSeconds));
  values.put(android.provider.MediaStore.Images.ImageColumns.DATE_MODIFIED, new java.lang.Double(dateSeconds));
  values.put(android.provider.MediaStore.Images.ImageColumns.MIME_TYPE, "image/png");
  values.put(android.provider.MediaStore.Images.ImageColumns.WIDTH, new java.lang.Long(mImageWidth));
  values.put(android.provider.MediaStore.Images.ImageColumns.HEIGHT, new java.lang.Long(mImageHeight));
  let uri = resolver.insert(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
  images.save(img, mImageFilePath);
  values.clear();
  values.put(android.provider.MediaStore.Images.ImageColumns.SIZE, new File(mImageFilePath).length());
  resolver.update(uri, values, null, null);
}

声明

部分内容来自网络

微信公众号 牙叔教程

在这里插入图片描述

QQ群

747748653

在这里插入图片描述

<think>好的,用户想要在Auto.js中刷新图库的方法或代码示例。首先,我需要回忆一下Auto.js的相关知识。Auto.js是一个基于JavaScript的自动化工具,常用于Android设备的自动化操作,比如模拟点击、滑动等。 用户提到的“刷新图库”可能指的是让系统媒体库更新,以便新保存的图片或文件能够立即出现在图库应用中。在Android系统中,当应用保存新图片后,系统媒体扫描服务可能需要触发才能更新图库。通常,这可以通过发送广播来实现,特别是发送ACTION_MEDIA_SCANNER_SCAN_FILE这个Intent,通知系统扫描特定文件。 接下来,我需要确认Auto.js中是否有相关API来发送这样的广播。Auto.js提供了`context.sendBroadcast()`方法,可以用来发送Intent。同时,可能需要使用`intent`模块来构建Intent对象。例如,构建一个指向文件路径的Intent,并设置动作为媒体扫描。 然后,查找是否有类似的代码示例。根据经验,可能需要先获取文件的绝对路径,然后创建Intent,设置动作和数据的URI(使用file://协议),最后发送广播。需要注意的是,Android 10及以上版本对文件访问权限有限制,可能需要适配不同的存储策略。 此外,用户可能需要处理多个文件或整个目录的情况。扫描单个文件使用ACTION_MEDIA_SCANNER_SCAN_FILE,而扫描整个目录可能需要使用MediaScannerConnection.scanFile方法,但Auto.js是否支持直接调用Java方法呢?可能需要通过runtime.exec执行shell命令,比如使用am broadcast命令发送广播。 还需要考虑用户是否了解如何获取正确的文件路径,以及权限问题,比如是否有存储权限。在Auto.js脚本中,可能需要先请求存储权限,确保应用有权访问相关文件。 最后,验证代码的正确性。例如,发送广播后,检查图库是否更新。如果用户遇到问题,可能需要调试路径是否正确,或者是否有其他限制因素。</think>在Auto.js中刷新图库(媒体数据库)通常需要发送系统广播通知媒体扫描服务更新。以下是两种实现方法及代码示例: ### 方法一:使用系统广播刷新单个文件 ```javascript // 获取需要刷新的文件路径(示例路径) let filePath = "/sdcard/Download/new_image.jpg"; // 创建File对象 let file = new java.io.File(filePath); // 构建媒体扫描Intent let intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); intent.setData(android.net.Uri.fromFile(file)); // 发送广播 context.sendBroadcast(intent); ``` ### 方法二:批量刷新指定目录 ```javascript // 使用am命令发送广播(需要root权限) let dirPath = "/sdcard/Pictures/"; runtime.exec(["am", "broadcast", "-a", "android.intent.action.MEDIA_MOUNTED", "-d", "file://" + dirPath]); ``` **注意事项:** 1. Android 10+ 需要使用`MediaStore` API访问公共目录[^4] 2. 需要授予存储权限: ```javascript // 在脚本开头请求权限 auto.waitFor(); if (!requestPermission("STORAGE")) { toast("需要存储权限"); exit(); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牙叔教程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值