ext.md 5.4 KB
Newer Older
D
DCloud_LXH 已提交
1 2
# 其它api

W
wanganxp 已提交
3 4 5 6 7
## Web平台

uni-app x的web版从uni-app的js引擎版迁移而来,理论上所有uni-app js引擎版的uni api在uni-app x的web版中都可以使用。但4.0版本的uni-app x的web版暂未对其他api进行测试。

## App平台uni api替代@uni
D
DCloud_LXH 已提交
8 9 10 11 12
插件市场和hello示例中还有一批可替代uni内置api的插件或示例代码,比如:
- [剪切板](https://ext.dcloud.net.cn/search?q=%E5%89%AA%E5%88%87%E6%9D%BF&orderBy=Relevance&cat1=8&cat2=81)`uni.setClipboardData``uni.getClipboardData`
- [拨打电话](https://ext.dcloud.net.cn/plugin?id=15235)`uni.makePhoneCall`
- [打开三方应用](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/template/schema/schema.uvue):打开浏览器、应用商店、地图并传参。`plus.openUrl`
- [分享](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/template/share/share.uvue)`uni.shareWithSystem`
W
x  
wanganxp 已提交
13
- 打开文件:`uni.openDocument`[hello uts示例](https://gitcode.net/dcloud/hello-uts/-/blob/dev/uni_modules/uts-nativepage/utssdk/app-android/index.uts)[插件市场](https://ext.dcloud.net.cn/plugin?id=12731)
D
DCloud_LXH 已提交
14 15 16
- [扫码](https://ext.dcloud.net.cn/search?q=%E6%89%AB%E7%A0%81&cat1=8&type=UpdatedDate)`uni.scanCode`
- [文件选择](https://ext.dcloud.net.cn/search?q=%E6%96%87%E4%BB%B6%E9%80%89%E6%8B%A9&cat1=8&cat2=81)`uni.chooseFile`
- [蓝牙](https://ext.dcloud.net.cn/search?q=%E8%93%9D%E7%89%99&orderBy=Relevance&cat1=8&cat2=81)
W
X  
wanganxp 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
- [NFC](https://ext.dcloud.net.cn/search?q=nfc&orderBy=Relevance&cat1=8&cat2=81)
- 播放音频:`uni.getBackgroundAudioManager``uni.createInnerAudioContext`,参考如下代码:
```vue
<template>
	<button @click="playAudio">播放音频</button>
</template>
<script>
	import MediaPlayer from "android.media.MediaPlayer"; //hx中对这里alt+左键转到定义,查看该库的方法清单
	export default {
		data() {
			return {}
		},
		methods: {
			playAudio() {
				let mediaPlayer = new MediaPlayer()
				try {
					mediaPlayer.setDataSource("https://www.w3cschool.cn/statics/demosource/horse.mp3") // 网络音频文件URL  //大体积的网络音频应在协程里加载,否则容易卡ui
					// mediaPlayer.setDataSource(UTSAndroid.convert2AbsFullPath("/static/horse.mp3")) // 本地音频文件
					mediaPlayer.prepare()
					mediaPlayer.start() // 开始播放
					// mediaPlayer.pause()
					// mediaPlayer.stop()
					// mediaPlayer.release() // 释放MediaPlayer对象
					// 倍速播放参考:https://developer.android.google.cn/reference/android/media/MediaPlayer#setPlaybackParams(android.media.PlaybackParams)
				} catch (e) {
					console.log(e);
				}
			}
		}
	}
</script>
```
W
x  
wanganxp 已提交
49

W
x  
wanganxp 已提交
50
## plus api替代@plus
W
x  
wanganxp 已提交
51 52 53 54 55 56 57 58 59 60 61
uni-app x 中不再支持plus和weex的API。过于plus api中一些常用的api,在uni-app x中进行了替换增补。
- plus.runtime.quit => [uni.exit](./exit.md)
- plus.runtime.install => [uni.installApk](./install-apk.md)
  
还有一些plus API未封装为 uni 的API,但可以直接使用如下代码调用。
- plus.runtime.openURL
```vue
<template>
	<view>
		<button @click="openSchema('https://uniapp.dcloud.io/uni-app-x')">使用浏览器打开指定URL</button>
		<button @click="openSchema('market://details?id=com.tencent.mm')">使用应用商店打开指定App</button>
W
X  
wanganxp 已提交
62
		<button @click="openSchema('androidamap://viewMap?sourceApplication=Hello%20uni-app&poiname=DCloud&lat=39.9631018208&lon=116.3406135236&dev=0')">打开地图坐标</button>
W
x  
wanganxp 已提交
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
	</view>
</template>
<script>
	import Intent from 'android.content.Intent';
	import Uri from 'android.net.Uri';
	export default {
		data() {
			return {}
		},
		methods: {
			openSchema(url : string) {
				const context = UTSAndroid.getUniActivity()!;
				const uri = Uri.parse(url)
				const intent = new Intent(Intent.ACTION_VIEW, uri)
				intent.setData(uri);
				context.startActivity(intent);
			}
		}
	}
</script>
```
W
x  
wanganxp 已提交
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120

## kotlin代码转uts简易指南@kt2uts

以上面的打开schema代码为例。

1. 打开一个靠谱的ai,询问:"kotlin中打开系统浏览器的代码",得到如下代码:
```kotlin
import android.content.Intent  
import android.net.Uri  
  
fun openSystemBrowser(url: String) {  
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))  
    startActivity(intent)  
}
```

2. 再问ai:"把上述代码转为ts代码""
```ts
import Intent from 'android.content.Intent';
import Uri from 'android.net.Uri';

function openSystemBrowser(url: string): void {  
  const intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));  
  startActivity(intent);  
}
```

这里注意几个差别:
- kotlin中import包,是`import android.content.Intent`,而uts是`import Intent from 'android.content.Intent'`。import后面需要跟名字,from后面需要引号括起来。
- kotlin定义一个函数是`fun`,而uts是`function`
- kotlin中定义一个常量是val,而uts是const;kotlin的变量定义是var,而uts推荐使用let。
- uts中实例化对象需要使用new关键字。
- kotlin中是自己创建activity、自己管理。而uts中activity已经被uni-app x框架创建好了,要获取当前activity,有专门的api,`const context = UTSAndroid.getUniActivity()!`

有时你得到的kotlin代码可能是简写,或者ai转ts时搞错了,需要自己推理一下缺什么,简单补补改改。

官方的uni api,都是uts代码调用系统api,这里面很多例子可以参考:[https://gitcode.net/dcloud/uni-api](https://gitcode.net/dcloud/uni-api)