uni-app Android 系统相册分享/发送到自己app 问题

发布于 1周前 作者 songsunli 来自 uni-app

uni-app Android 系统相册分享/发送到自己app 问题

问题描述

Android 系统相册选择一张照片打开,选发送,发送选择的app中,选择自己开发的uniapp,如果app 正在运行,无法启动app 主页,完全退出app 的情况下,可以启动主页,为什么?

3 回复

不清楚你说的启动是什么意思,可以贴贴代码, app运行着,然后进入app onLaunch 肯定不会加载,会进入onshow


通过额外的方式打开应用是吧,观察 onShow/onLaunch/onLoad 的打印,最好提供空白工程,并说明 vue 和 HBuilderX 依赖版本和运行的平台

在处理 uni-app 中 Android 系统相册分享或发送到自己应用的问题时,通常需要使用 Android 原生的 Intent 机制来实现。uni-app 本身提供了丰富的 API,但涉及到 Android 原生功能时,通常需要自定义原生插件或使用条件编译来针对 Android 平台进行特殊处理。

以下是一个简化的代码案例,展示了如何在 uni-app 中通过自定义原生插件来实现从 Android 系统相册分享图片到自己的应用。

步骤 1: 创建 Android 原生插件

首先,在你的 uni-app 项目根目录下创建一个 native-plugins 文件夹,并在其中创建一个新的 Android 原生插件。例如,我们创建一个名为 ShareFromGallery 的插件。

ShareFromGalleryPlugin.java

import android.content.Intent;
import android.net.Uri;
import android.provider.MediaStore;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;

public class ShareFromGalleryPlugin extends UniModule {
    @JSMethod(uiThread = false)
    public void startGalleryIntent(UniJSCallback callback) {
        Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        intent.setType("image/*");
        getContext().startActivityForResult(intent, 1001);
        // Note: Handle onActivityResult in your main activity or use another method to pass result back to JS
    }

    // onActivityResult handling would go here if implemented directly in the plugin
}

步骤 2: 配置插件

manifest.json 中配置你的原生插件。

"nativePlugins": [
    {
        "android": {
            "package": "com.yourpackage.ShareFromGalleryPlugin",
            "name": "ShareFromGallery",
            "class": "ShareFromGalleryPlugin"
        }
    }
]

步骤 3: 在 uni-app 中调用插件

在你的 uni-app 代码中,使用 plus.bridge.exec 来调用这个原生插件。

plus.bridge.exec('ShareFromGallery', 'startGalleryIntent', [], function(e) {
    console.log('Gallery intent started');
    // Handle result here if implemented in JS (usually handled in native code)
});

注意

  1. 上述代码仅展示了如何启动相册选择 Intent,并未处理选择后的结果。在实际应用中,你需要在主 Activity 中重写 onActivityResult 方法,并将结果通过某种方式传递给 uni-app。
  2. 对于更复杂的需求,比如直接接收并处理分享的数据,可能需要更复杂的 Intent 过滤和处理逻辑。
  3. 确保你的应用有读取外部存储的权限,特别是在 Android 6.0 及以上版本中需要动态申请权限。
回到顶部