Kytrun
Kytrun
  • 发布:2021-06-28 11:12
  • 更新:2022-09-05 11:31
  • 阅读:1872

将自己的 uni-app 注册进分享列表,接收其他 app 的分享【Android】

分类:uni-app

社区有很多小伙伴都有此需求,有人实现了但是没有分享经验,经过半天的踩坑,在此分享一下。

  1. 首先最大的跨越是将在线打包改成了离线打包的形式,这一点一定要注意申请 AppKey 且各处 appId 正确。
  2. 找到在 官方的离线打包教程 中关于 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把自己应用加入到系统文件分享中 中的其他类型

  1. 在 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)  
				}  
			},  
		}
1 关注 分享
2***@qq.com

要回复文章请先登录注册

1***@163.com

1***@163.com

https://ask.dcloud.net.cn/article/39168
请问这个云打包的该怎么配置呢
2022-09-05 11:31
FullStack

FullStack

添加到“用其他应用打开”中、app加入系统分享列表、获取分享的文件(ios、android):[https://ext.dcloud.net.cn/plugin?id=6901](https://ext.dcloud.net.cn/plugin?id=6901)
2022-01-19 14:18
yinghuoc

yinghuoc

回复 百里守约 :
插件库有好几个插件,
2021-12-14 00:49
百里守约

百里守约

IOS 怎么解决?
2021-12-13 22:46
yinghuoc

yinghuoc

ios怎么搞
2021-12-07 10:04
1***@qq.com

1***@qq.com

楼主我也想请教一下
2021-10-21 16:37
Kytrun

Kytrun (作者)

回复 七年期限 :
已经私信你了
2021-10-20 08:53
七年期限

七年期限

楼主有qq吗 想请教一下 我试了试不太行 感觉缺点东西
2021-10-19 08:50