社区有很多小伙伴都有此需求,有人实现了但是没有分享经验,经过半天的踩坑,在此分享一下。
- 首先最大的跨越是将在线打包改成了离线打包的形式,这一点一定要注意申请 AppKey 且各处 appId 正确。
- 找到在 官方的离线打包教程 中关于
AndroidManifest.xml
的部分,找到如下代码:<activity android:name="io.dcloud.PandoraEntry" android:configChanges="orientation|keyboardHidden|keyboard|navigation" android:hardwareAccelerated="true" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="user" android:theme="@style/TranslucentTheme" android:windowSoftInputMode="adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
添加一个
intent-filter
:<!-- 接收分享 --> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/*" /> </intent-filter>
虽然注册很简单,但是离线打包是一个大坎,如果官方云打包支持就很方便了!
这里接收的是文本,可参考 Android把自己应用加入到系统文件分享中 中的其他类型
- 在 vue/js 业务代码中使用
plus.runtime.arguments
即可获取到分享的内容了!唤醒启动时可以在 vue 页面中的 onReady 接收到,也可以在 onShow 时获取,但是这里有个坑:
如果 app 在后台直接切回来, onShow 会再次获取到本次以分享形式冷启动时的内容,但如果没有完全退出,保留后台,以分享的形式切回,则是此次分享的内容,需要做好判断。
分享一下代码:// 两个变量在 vue 代码之外 let launchArgs = '' // 存储启动时的参数,用于在 onShow 中判断,如果一致则不使用 let ready = false // 因为 onShow 在 onReady 之前触发,所以可能会有没渲染完成的情况,直接跳过 // 省略... onReady() { ready = true this.onShared() }, onShow() { if (launchArgs !== plus.runtime.arguments) { this.onShared() } }, methods: { onShared() { if (ready && plus.runtime.arguments) { launchArgs = plus.runtime.arguments const sharedText = JSON.parse(launchArgs)['android.intent.extra.TEXT'] // console.log('分享的文本内容是:',sharedText) } }, }
8 个评论
要回复文章请先登录或注册
1***@163.com
FullStack
yinghuoc
百里守约
yinghuoc
1***@qq.com
Kytrun (作者)
七年期限