如何摆脱“允许Expo Go修改这张照片”? Android 中的警报

2024-06-22

我正在开发反应本机博览会应用程序,它使用展会图像选择器并通过使用将该图像保存到不同的位置世博媒体库.

一切似乎都工作正常,但每次用户捕获图像时都会弹出此弹出窗口。这种情况在 Android 上不断发生。它正在影响用户体验。

如果你们能帮我解决这个问题,那就太好了。 谢谢

允许 Expo Go 修改这张照片吗? https://i.stack.imgur.com/wBzul.png

Versions

“反应本机”:“0.64.3”

“世博会”:“〜44.0.0”

"expo-image-picker": "~12.0.2"

"expo-media-library": "~14.0.0"

这是我用来存档提到的功能的代码。

import * as ImagePicker from "expo-image-picker";
import * as MediaLibrary from "expo-media-library";

const savePhoto = async (data, onSucess) => {
  const asset = await MediaLibrary.createAssetAsync(data?.uri);
  const album = await MediaLibrary.createAlbumAsync(
    "TEST_FOLDER",
    asset,
    false
  );
  const albumAssets = await MediaLibrary.getAssetsAsync({
    album: album,
    first: 1,
    sortBy: [[MediaLibrary.SortBy.creationTime, false]],
  });
  if (albumAssets?.assets[0]) {
    onSucess(albumAssets.assets[0], data);
  }
};

const takePicture = async (onSucess, onError) => {
  let data = await ImagePicker.launchCameraAsync({
    mediaTypes: ImagePicker.MediaTypeOptions.Images,
    quality: 0.8,
    allowsEditing: true,
    base64: true,
  });
  if (data.cancelled === false) {
    savePhoto(data, onSucess);
  } else {
    onError();
  }
};

这是app.json file.

{
  "expo": {
    "name": "product",
    "slug": "product_frontend",
    "version": "1.0.0",
    "orientation": "landscape",
    "icon": "./assets/images/icon.png",
    "userInterfaceStyle": "automatic",
    "splash": {
      "image": "./assets/images/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "plugins": [
      [
        "expo-media-library",
        {
          "photosPermission": "Allow $(PRODUCT_NAME) to access your photos.",
          "savePhotosPermission": "Allow $(PRODUCT_NAME) to save photos.",
          "isAccessMediaLocationEnabled": "true"
        }
      ],
      [
        "expo-image-picker",
        {
          "cameraPermission": "Allow $(PRODUCT_NAME) to access your camera",
          "photosPermission": "The app accesses your photos to let you share them with your friends."
        }
      ]
    ],
    "updates": {
      "fallbackToCacheTimeout": 0
    },
    "assetBundlePatterns": ["**/*"],
    "ios": {
      "supportsTablet": true
    },
    "android": {
      "package": "com.comapny.product",
      "adaptiveIcon": {
        "foregroundImage": "./assets/images/adaptive-icon.png",
        "backgroundColor": "#FFFFFF"
      },
      "softwareKeyboardLayoutMode": "pan",
      "permissions": []
    },
    "web": {
      "favicon": "./assets/images/favicon.png"
    },
    "scheme": "product"
  }
}

如果你们能帮我解决这个问题,那就太好了。 谢谢。


我也遇到了这个问题,并相信我找到了解决方法。

你打电话时createAlbumAsync你可以通过true。这将复制资产数据,而不是移动或修改它,这会导致 android 弹出窗口。然后您可以导入并使用expo-file-system如果这对您很重要,请删除原始图像。请参阅下面的我的代码:

import * as ImagePicker from 'expo-image-picker';
import * as MediaLibrary from 'expo-media-library';
import * as FileSystem from 'expo-file-system';

const takePhoto = async () => {
    let asset = {};
    let data = await ImagePicker.launchCameraAsync();
    const permission = await MediaLibrary.requestPermissionsAsync();
    if (!data.cancelled) {
      if (permission.granted) {
        try {
          // create an asset using the imagePicker data uri, on android a folder cannot be created without a pre-existing asset
          asset = await MediaLibrary.createAssetAsync(data.uri);
          // getAlbumAsync returns null if no album is found
          const existingFolder = await MediaLibrary.getAlbumAsync(
            'AlbumName'
          );
          // if the album doesn't exist, create it
          if (!existingFolder) {
              await MediaLibrary.createAlbumAsync(
              'AlbumName',
              asset,
              // passing true copies the file and doesn't move it, moving it is what triggers the android modify popup
              true
            );
            // since the file is copied and not moved we can then delete the original after
            await FileSystem.deleteAsync(data.uri);
          } else {
            // if the album exists add the asset to it
            // similar to createAlbumAsync, passing true copies the file and doesn't move it, so again we delete the original after
            MediaLibrary.addAssetsToAlbumAsync(asset, existingFolder.id, true);
            await FileSystem.deleteAsync(data.uri);
          }
        } catch (error) {
          console.log(error);
        }
      } else {
        console.log('Storage permissions must be enabled to save file');
      }
  }
}

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何摆脱“允许Expo Go修改这张照片”? Android 中的警报 的相关文章

  • Eclipse 中使用 Phonegap Android 开发的 HTML 表单输入

    我有一个奇怪的问题 我最近使用 Phonegap 和 Xcode 开发了一个 ios 应用程序 一切顺利 他们在应用程序商店中 一切正常 其中一个元素是用 HTML 编写的简单电子邮件表单 它看起来像这样
  • 提交搜索或选择搜索建议时隐藏键盘

    我有一个操作栏搜索小部件 也提供搜索建议 当用户输入查询并提交或选择搜索建议时 键盘不会消失 我该如何解决这个问题 我无法弄清楚如何在搜索提交或建议选择时隐藏键盘 谢谢 要隐藏输入法编辑器 请使用InputMethodManager Inp
  • Overdraw 和 Romain Guy 的博客文章 Android 性能案例研究

    基于 Romain Guy 的博客文章Android 性能案例研究 http www curious creature org 2012 12 01 android performance case study 在谈到透支时 他这样说 删除
  • 如何使用约束布局来模拟加权线性布局

    我们如何在约束布局中像在 LinearLayout 中一样平等地节省空间 例如 如果下面的布局是带有约束的 那么它会变成什么样子
  • Android:Realm + Retrofit 2 + Gson

    我使用时遇到问题Retrofit Gson and Realm 我知道这三个库的组合存在问题 一些答案建议设置一个ExclusionStrategy for Gson可以解决这个问题 我也尝试过 但是没有成功 我的代码如下所示 public
  • 如何在Android Studio中查看所有TODO任务?

    如何在 Android Studio 中打开一个视图 其中包含我使用创建的所有任务 TODO评论会显示吗 您可以在左下角菜单栏找到此 视图 称为待办事项 or 安卓工作室 转到 View gt Tool Windows gt TODO 显示
  • Eclipse图形布局无法显示adView

    我从 Eclipse Helios 更新到 Eclipse Juno 将 Android SDK 工具更新到 v23 以及 Google Play lib 4 4 由于它们 我无法在 Eclipse 图形布局窗口中查看 XML 布局 我收到
  • 如何在android中获取Room数据库的行数?

    我遵循拥有存储库和道等的实践 我试图通过一个函数来获取数据库存储库中的行数 int getNumFiles List
  • 如何使用appium和java在Android中向下滚动以单击元素?

    我想知道如何使用appium和java向下滚动以单击Android中的元素 我里面有一个元素列表 android support v7 widget RecyclerView由于它有10多个元素 所以我们需要滑动屏幕才能看到下面的元素 每个
  • ubuntu升级到14.04 TLS后eclipse Juno经常自动关闭

    在升级到 14 04 之前 我只是在使用 eclipse 但是升级到 14 04 后 我的 eclipse 经常关闭 没有任何警告消息 它会在我的桌面上生成一个 hs err pid4612 log 文件 我该如何解决这个问题 在 ecli
  • 没有标题和边框的自定义对话框

    基于这里的代码 http developer android com guide topics ui dialogs html CustomDialog http developer android com guide topics ui
  • Android 中的发布与调试构建差异

    全部 我们面临一个奇怪的问题 我们的应用程序在调试构建变体中运行良好 但它无法在发布版本变体上正确执行 甚至奇怪的是 如果我们将发布构建变体的 debuggable 设置为 true 它就可以正常工作 Proguard 在这两个变体中都被禁
  • Android 上为什么会出现线程泄漏?

    我在 Android 应用程序中注意到 每次退出主屏幕时 堆大小 泄漏 都会增加 ByteArrayOutputStream 的量 我能做到的最好的办法就是添加 this mByteArrayOutputStream null 在 的最后r
  • 使用 Volley 发送带有 JSON 数据的 POST 请求

    我想发送一个新的JsonObjectRequest要求 我想接收 JSON 数据 来自服务器的响应 好的 我想通过此请求将 JSON 格式的数据发送到服务器 JsonObjectRequest request new JsonObjectR
  • Web 服务器上的身份验证和授权 ?

    我正在构建一个 Android 应用程序 它与 apache tomcat 上的 Web 服务器进行通信 Web 服务器采用 JAVA EE 构建 目前 为了进行身份验证和授权 我使用用户名 密码 为了管理会话 我使用令牌 因此 当用户登录
  • ViewCompat.setOnApplyWindowInsetsListener使状态栏颜色消失

    这是我用来检测何时的代码Keyboard Height变化 唯一的问题是Statur Bar当此代码运行时 颜色消失并变为白色 ViewCompat setOnApplyWindowInsetsListener this getWindow
  • 语音识别器在第一个结果后听不到声音

    我在Android中使用SpeechRecognizer和RecognizerIntent来实现语音识别 我的目标是在语音识别器在屏幕上显示结果后重新开始收听语音 为此 我使用以下代码 问题是 第一次运行良好并显示结果 但在第二次开始监听
  • 我可以为每个片段单独提供工具栏吗?如何处理导航抽屉

    在我的应用程序中 某些页面的工具栏中有自定义视图 有些片段具有透明工具栏 有些片段具有坐标布局滚动 因此 我决定为每个片段单独设置工具栏 我想知道这是否是一个好的做法 如果有人已经这样做了 请分享代码或示例 您可以在片段中使用自定义工具栏
  • 是否可以在 AlertDialog 中自定义正向和负向按钮?

    是否可以在 AlertDialog 中自定义正向和负向按钮 我需要用自定义替换默认的正面和负面外观 setPositiveButton android R string ok new DialogInterface OnClickListe
  • SQLDroid 和加密数据库

    我的应用程序有一个已经存在的数据库 已经存在 是指我不在我的应用程序中创建数据库 我只是连接到它并读取数据 为了设置连接 我使用 SQLDroid 现在我想知道是否有可能使用 SQLDroid 加密我的数据库 否则我的数据库未加密 任何人都

随机推荐