本篇文章给大家谈谈ro2化学式,以及ro22 ocr sample book的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
文章详情介绍:
文旅周刊丨走进海南东方市俄贤岭 探秘“小桂林”
■ 海南日报记者 刘婧姝
万年,百万年,千万年,亿万年……常常是人们用来描述喀斯特地貌生长形成所用的时间单位。从大自然沧海桑田的变化中,我们可以一眼万年,感受到人类历史的纵深和个人生命的短暂与珍贵。
俄贤岭被誉为“东方小桂林”。海南日报记者 陈元才 摄
位于海南岛西部的东方市与昌江黎族自治县交界处的俄贤岭,有我国最南部的热带石灰岩集群,有“东方小桂林”之美誉。这里奇峰林立,洞穴变化万千,拥有着约160平方公里的海南最大面积的喀斯特地貌生态环境。本次探访的娥娘洞,就藏身于此。这儿不仅有独特的生物种群,更有难寻的石灰岩溶洞资源。
娥娘洞:洞中有独特的生物种群
说难寻,是有依据的。此岭共有山峰9座,海拔超过1000米的山峰6座,其中最高峰的海拔超过1200米。数年前,不少科研人员为了研究需要,组队前往,只为一探洞内奥秘。海口畓榃湿地研究所的所长卢刚,便是其中之一。
身在娥娘洞仿佛置身于时光隧道中。海南日报记者 刘婧姝 摄
“溶洞隐藏在山体中,山路崎岖,洞口较小又隐蔽,一般人很难发现。”卢刚曾多次进入洞内,与科研人员一起进行生物调查。“在护林员和当地村民的带领下,仍然在难走的山路中行进了2个多小时,才顺利找到洞口。”
娥娘洞开发前,洞内还栖息着大量的蝙蝠,当地人称之为蝙蝠洞。记者从当地老一辈的村民口中得知,娥娘洞最初是村民上山打猎避雨时发现的,被发现时洞里的蝙蝠数量极多。
上世纪60年代,因物资匮乏,为解决家庭温饱,每年4月至5月,村民都会成群结伴,到溶洞里住上3至5天,以猎捕溶洞里的蝙蝠来维持生计。而后至90年代,当地政府得知溶洞里有蝙蝠,便派农业技术员前去考察,发现溶洞里蝙蝠数量惊人,还有大量的粪便,完全可以就地取材,为村里农田和果树提供肥料。
总之,不论何时,这座生态宝库都以不同形式,滋养着世世代代生活在这里的人民。
对卢刚而言,最吸引他的还是洞中独特的生物种群。洞穴里,除了蝙蝠,还有马陆、弓背螽、蚰蜒和螃蟹……其中,除螃蟹外,其它都是适应了在洞穴生活的洞穴特化物种。在这儿,他们还发现了类似于大洋洲“洞穴发光虫”的独特物种,据观察和推测,它们可能是一种双翅目的昆虫,能吐出带黏液的丝线,等待飞虫自投罗网。
俄贤岭:喀斯特地形寄生独特贝类
上山前,听到如此之多娥娘洞的奇闻轶事,记者早已按捺不住自己的脚步。于是乎,在护林员的引领下,踏林间清幽木栈道而上,开启了深山雨林的探寻之旅。
俄贤岭上的海南树蜗牛。海南日报记者 陈元才 摄
娥娘洞位于俄贤岭九峰中的主峰的半山腰。放眼望去,整个山脉都呈现着典型喀斯特地貌,由二叠系石灰岩构成的山体上,随处可见裸露的岩层,近距离观看,许多不规则孔隙遍布其中,用手细细摩挲,指腹间传来粗糙的质感,似乎是贝类生物的残骸。在记者凝视石灰岩表层感叹大自然的鬼斧神工时,一只不知名的螺缓缓地进入视线。
俄贤岭上的植物。海南日报记者 陈元才 摄
“这是石灰岩上寄生的烟管螺,在这里很常见,离开这里却很难找到。”俄贤岭管护站管理员张智华得意地说,在俄贤岭,最为独特的生物就是贝类,这得益于喀斯特地貌形成的特有的陆生和水生系统。
夏日炎炎,在密林间穿梭,虫鸣唧唧,溪流如丝如带,缭绕林间,和满目的翠绿相得益彰。
行至半山腰,一行人早已大汗淋漓。倏地,一阵如夏日空调般的凉风,扑面而来,原来,已经到了溶洞洞口。洞的入口矗立一天然巨石,俨然一美貌女子的侧面,那就是传说中的“娥娘”。
探访溶洞:洞中有洞 洞洞相通
石钟乳、石瀑、石笋……洞内最为宝贵的天然资源,也是此行探访的重点。
究其形成原理,海南师范大学地理与环境科学学院院长赵志忠解释:可溶性岩石与地下水和地表水发生化学作用而形成的地貌,称为喀斯特地貌。
喀斯特地貌的形成过程:CO2+H2O+CaCO3⇌Ca2++2HCO3-,而且这个化学方程式还是可逆的,往右是岩石溶蚀过程,可形成地表溶蚀地貌和地下溶洞;往左是岩石堆积过程,形成石钟乳、石笋等。
娥娘洞呈东西走向,曲径通幽,辗转曲折,一眼望不见头。如今,洞内可游览的路线约800米,内设3个石厅,结合“三月三”“娥娘”的民俗和传说故事,溶洞被规划为:娥娘迎宾、九峰秘境和仙境人间三大主题。
继续在洞内一探究“境”,仿佛置身于时光隧道中。洞内霓虹灯不停变幻着,石钟乳、石笋、石瀑也被衬得各具其形,千姿百态,耐人寻趣。光影场景让人恍惚,遽然,眼前有黑影一掠而过,伴随着一阵尖锐而短暂的鸣叫声,瞬间已然不见了踪影。
“是蝙蝠,它们喜欢在阴凉潮湿的地方待着,随着洞内的开发,人流量增多后,洞内的蝙蝠越来越少,它们往更高的溶洞去了。”张智华说。
一路的行进中,耳旁始终萦绕着水声。原来,在石厅下面,还有流水旋转。细观洞内,洞中有洞,洞洞相通,仿若巨大的迷宫。沿着路标通过狭窄的甬道,眼前豁然开朗,洞内高至数十米,脚下是一个个大小不一的小池潭,上边修建了玻璃栈道,脚踏之处,像是踩进了七彩瑶池。
有研究以为,娥娘洞分为上下两层,上层洞穴曾是地下河通过的古地下河床,其流向为自东向西,在现有洞口处流出地表。由于地壳抬升及构造运动作用,地下水下切,溶洞下面又形成了新的地下河。
洞内游览约30分钟后,一束光照射进来,打在了众人脸上,耳旁的水声也戛然而止,溶洞的出口便到了。
俄贤岭未来:人与自然的和谐发展
景区的开发与保护是一个永恒的话题。
赵志忠认为,俄贤岭喀斯特地貌比北方寒旱地区的喀斯特发育要好,与广西、云南、贵州等地区的喀斯特地貌相比,发育阶段更早,具有一定的开发与研究价值。
在2016年,东方俄贤岭景区开发有限公司成立,对旅游资源进行开发和经营管理。2022年1月,景区正式开门迎客。
“建设是在满足旅游需求和环境保护的双重要求下进行的,在结合景观、景点的自然美和完整性的基础上,不破坏原有的自然生态环境,形成人与自然的和谐统一,达到景区的可持续发展。”东方俄贤岭景区开发有限公司执行董事林立峰说。
俄贤岭喀斯特地貌。海南日报记者 陈元才 摄
目前,溶洞开发的一期工程已经完工。因此,在即将开发的二期工程里,景区还计划设置小型的溶洞地质科普博物馆,利用展览橱窗,陈列具有代表性的钟乳石样品,配合图文介绍,让游客对喀斯特地貌有进一步的了解。
“我们将增加钟乳石展示柜,采用塑石包裹洞壁,在洞壁上预留凹槽,放置钟乳石、石花等自然景观,配合灯光,参考浮雕、岩画等表现形式,旁边辅以简明图画、文字介绍相应自然景观名称以及形成过程,游客通过阅读、观赏,更加直接、全面了解喀斯特地质地貌,从而增强保护意识。”林立峰说。
《俄贤岭自然保护区综合科学考察报告》显示
俄贤岭是省内现存面积最大
原生状态保存得最为完整的
从低海拔到高海拔的喀斯特地貌原始热带雨林
涵盖种子植物767种
珍稀濒危植物26种
延伸阅读
喀斯特地貌上的珍稀植物
《海南珍稀保护植物图鉴与分布特征研究》的作者、海南大学教授杨小波认为,在海南西南部的喀斯特地貌的石灰岩地区,由于特殊的地质环境和不同的降雨量,发育有季雨林和热带雨林,较大的喀斯特地貌的石灰岩地区为季雨林和热带雨林的过渡区,蕴育出较多的海南特有植物和分布较多的珍稀保护植物,《海南珍稀保护植物图鉴与分布特征研究》收集的111种植物中,桫椤、坝王栎、海南粗榧、青皮、降香檀、蕉木、囊瓣木和多种兰科植物等保护植物都在该地区。(徐晗溪 辑)
华为HMS开发零基础上手
本文是学习过程记录,这一篇主要包含HMS的配置、APPGallery连接和广告服务、机器学习服务等内容。
几个小技巧
对于红色警告的单词,鼠标放到单词字母中间,然后Alt+Enter一般可以自动导入。
对于数字参数,可以选中它,然后Ctrl+Shift+C,会把它变为一个大写的变量。
要把哪个Activ作为启动页,只要打开AndroidManifest.xml文件,把其中的<intent-filter>…部分剪切到目标Activity内即可,例如:
<activity android:name=".TextActivity">
准备工作
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
HMS,即Huawei Mobile Service华为移动服务,是和谷歌的GMS(Google Mobile Service)对标的另外一套安卓服务框架。
安卓是开源的,但其上的服务框架GMS则是完全的谷歌产品。HMS是华为搭建自有终端软件生态系统的关键产品,也是未来鸿蒙系统生态的重要前提。
要在安卓APP开发中使用HMS的各种强大功能,首先需要注册成为火花纹开发者联盟开发者,并完成用户身份认证,推荐使用银行卡自动认证,基本上可以实时完成。
华为开发者联盟传送门
创建在线项目和应用
在开发APP之前,应该先在华为开发者联盟网站的【管理中心】创建一个项目,并在项目内创建APP应用。
华为开发者管理中心传送门
华为的应用商店叫做AppGallery,所以我们进入【AppGallery Connect(AGC)】来管理项目和应用。
进入【我的项目】,添加项目,名称任意。然后【添加应用】,如下图所示。注意应用包名建议用.huawei,如果遇到包名已经被占用,建议包名结合用户名类似user.demo.huawei或demo.user.huawei。
然后我们回到【我的项目】首页,进入这个新建的项目,可以看到这里有开发者ID(Developer ID)和APP ID、API Key等信息。
进入【API管理】可以设定这个项目能够使用哪些HMS的服务功能。下面是一些常用服务的简介。
服务 | 说明
-|-|-
Analytics Kit | 分析服务,帮助开发者分析用户使用数据。
Auth Service | 第三方身份认证服务,比如苹果账号、微信账号、QQ账号等。
Remote Configuration | 远程配置服务,利用云端配置自动更改APP行为或外观。
App Linking | 跨应用的连接跳转,也帮助开发者跟踪用户连接点击行为。
APMS | 应用性能管理和监控。
App Messaging | 用于内信息,各种弹窗和提示。
Cloud Hosting | 云主机服务。
Cloud Storage | 云存储服务。
In-App Purchases | 应用内购买付费服务。
Account Kit | 华为账号服务,用华为账号登陆APP。
Game Service | 游戏服务,玩家成就、排行榜和存档。
Push Kit | 消息推送服务,向用户推送通知。
Wallet Kit | 钱包服务,卡、证、券、票、钥匙等各类凭证电子化。
Map Kit | 地图服务。
Drive Kit | 云空间服务。
ML Kit | 机器学习服务,涉及文字识别、图像识别、语音识别、人脸识别等。
Safety Detect | 安全检测服务,防病毒和恶意程序。
Site kit | 位置服务,基于地理定位的服务。
Nearby Service | 近距离通信服务,与附加的手机传数据。
FIDO | 线上快速身份验证服务,生物特征认证和快速线上身份验证。
Awareness Kit | 情景感知服务,包括位置、天气、用户状态、环境光等。
如果搞不清这个些服务的状况,那么可以先都打开。
配置开发项目
打开AndroidStudio新建项目。注意包名Package name要和在线的一致,如下图所示,注意不要有多余的空格,否则无法下一步。建议Minimum最小SDK不要故意选太低,建议20以上。
1. agc配置文件
从网站【我的项目】找到对应项目,下载应用对应的agconnect-services.json文件,将AndroidStudio文件列表切换到Project模式,把这个json文件拖拽到app文件夹下,与src文件夹同一级别,弹窗move提示直接OK。
然后在网站项目页面点击【添加SDK】,根据下面提示进行配置。
2. 项目级构建设置
然后再切换Project回到Android,找到【Gradle Scripts/build.gradle(Project…)】项目级构建配置,编辑添加两个maven仓库和一个classpath路径,完成后类似如下所示:
buildscript {
repositories {
google()
jcenter()
maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
classpath "com.android.tools.build:gradle:4.0.1"
classpath 'com.huawei.agconnect:agcp:1.3.1.300'
}
}
allprojects {
repositories {
google()
jcenter()
maven {url 'https://developer.huawei.com/repo/'}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
修改之后点击顶部弹出的Sync Now更新设置。也可以点击Sync with Gradle Files按钮,如下图所示。
3. 模块级构建设置
然后找到找到【Gradle Scripts/build.gradle(Module…)】模块级构建配置,顶部添加一个app plugin插件,dependencies中添加一个implementation依赖,代码如下所示:
apply plugin: 'com.android.application'
apply plugin: 'com.huawei.agconnect'
android {
compileSdkVersion 30
buildToolsVersion "30.0.0"
defaultConfig {
...
}
buildTypes {
...
}
}
dependencies {
...
implementation 'com.huawei.agconnect:agconnect-core:1.3.1.300'
}
修改之后点击顶部弹出的Sync Now更新设置。
添加广告服务
华为广告服务HUAWEI Ads可以让我们直接在APP页面内放入一个广告条,这个广告条内容是华为提供的,如果APP用户大量观看这个广告,华为就会向开发者支付一定的广告酬劳。
几乎所有的应用或游戏都可以放入广告条,广告条形式有很多种,常用的有banner广告位和应用启动画面广告位(开屏广告)。
华为广告服务首页
从广告服务首页点【查看文档】进入文档页面。然后左侧浏览到【广告服务/流量变现服务/应用开发/集成HMS Core SDK】,参照下面提示进行配置。
1. Project模式添加json配置
参见上面内容,在project模式下,确保agconnect-services.json文件被放到了src同级目录。
2 项目级build添加2个仓库和1个路径
参见上面内容,在【Gradle Scripts/build.gradle(Project…)】中:
检查两处仓库maven {url ‘https://developer.huawei.com/repo/’}是否有添加(jcenter()下面)。
检查classpath ‘com.huawei.agconnect:agcp:1.3.1.300’是否正确添加。
3. 模块级build添加2个实现和1个插件
参见上面内容,在【Gradle Scripts/build.gradle(Module…)】中:
检查dependencies中是否添加implementation ‘com.huawei.agconnect:agconnect-core:1.3.1.300’
添加新的implementation ‘com.huawei.hms:ads-lite:13.4.33.300’
检查是否添加apply plugin: ‘com.huawei.agconnect’
4. 创建AdSampleApplication类
在应用目录上右击,创建java类class,命名为AdSampleApplication。
然后编辑内容为下面内容,注意第一行应该不同。
package hms.demo02.zhyuzh;
import android.app.Application;
import com.huawei.hms.ads.HwAds;
public class AdSampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
HwAds.init(this);
}
}
同时修改目录文件【mainifests/AndroidManifests.xml】,向<application…>中添加以下两行:
<application
Banner广告
android:usesCleartextTraffic="true"
android:name=".AdSampleApplication"
...
>
...
</application>
我们要在MainActivity界面上显示一个华为广告图片。
1. 修改activity_main.xml
改为LinearLayout,添加一个BannerView,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:hwads="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity">
<com.huawei.hms.ads.banner.BannerView
android:id="@+id/hw_banner_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
hwads:adId="testw6vs28auh3"
hwads:bannerSize="BANNER_SIZE_360_144"/>
</LinearLayout>
注意上面LinearLayout中新增的xmlns:hwads=”http://schemas.android.co,没有它的话下面hwads会报错。
注意最后的BANNER_SIZE_360_144,如果是BANNER_SIZE_360_57可能就不显示图像。
2. 修改MainActivity.java
主要修改onCreate方法的内容,使用loadAd()来获取广告,修改后的代码主要代码如下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BannerView bannerView = findViewById(R.id.hw_banner_view);
bannerView.setAdId("testw6vs28auh3");
bannerView.setBannerAdSize(BannerAdSize.BANNER_SIZE_360_57);
AdParam adParam = new AdParam.Builder().build();
bannerView.loadAd(adParam);
}
}
最后,你需要有一台华为的手机,打开开发者模式,授权USB调试,并连接到AndroidStudio,安装调试才能看到华为广告出现在画面上。
非华为手机都不能正常显示这个广告内容。
文本识别
如何开发一个能够识别拍照照片中文字的APP?这要用到HMS的机器学习服务ML Kit。
从HMS文档页面浏览到【机器学习服务/Android/应用开发/开发准备/集成HMS Core SDK】页面,参照以下步骤进行。
1. 添加AGC配置文件
如前所述,确保agconnect-services.json被正常下载和添加。
2. 配置Maven仓库
如前所述,确保在项目级构建设置【Gradle Scripts/build.gradle(Project…)】中的两个jcenter()后面添加了新的仓库地址。
3. 添加依赖实现
往下层浏览【集成HMS Core SDK/添加编译依赖/集成文本识别服务SDK】,参照下面说明继续。
如前所述,在模块级构建设置【Gradle Scripts/build.gradle(Module…)】
中添加几行新代码:
implementation 'com.huawei.hms:ml-computer-vision-ocr:2.0.1.300'
implementation 'com.huawei.hms:ml-computer-vision-ocr-latin-model:2.0.1.300'
implementation 'com.huawei.hms:ml-computer-vision-ocr-jk-model:2.0.1.300'
implementation 'com.huawei.hms:ml-computer-vision-ocr-cn-model:2.0.1.300'
这里包含了拉丁日韩中英文识别工具包。
别忘了检查插件行apply plugin: ‘com.huawei.agconnect’被添加在结尾。
4. 云端识别开发
切换页面到【应用开发/文本类服务开发/文本识别】页面,参照下面内容继续。
HMS的文本识别基本步骤是:
创建一个分析器MLTextAnalyzer,并设置分析器参数
创建一个机器学习框架MLFrame
将MLFrame传递给分析器MLTextAnalyzer进行识别,利用onSuccess回调执行操作
识别完成后停止分析器,释放资源。
我们创建一个新的Activity,把这个逻辑写入java代码。由于MLFrame需要使用到位图进行识别,所以我们利用照相机获取拍摄的图片。
界面xml部分:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".textActivity">
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:hint="请先拍照"
android:minHeight="100dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="100dp"
android:onClick="shot"
android:text="SHOT!" />
<Button
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="100dp"
android:onClick="recog"
android:text="RECOG!"
/>
</LinearLayout>
</LinearLayout>
逻辑代码java部分:
public class textActivity extends AppCompatActivity {
public static final int REQUEST_CODE = 5;
Bitmap bitmap=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_text);
}
public void shot(View view) {
Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==REQUEST_CODE && resultCode==RESULT_OK){
assert data != null;
bitmap=(Bitmap) Objects.requireNonNull(data.getExtras()).get("data");
ImageView imageView=findViewById(R.id.image_shot);
imageView.setImageBitmap(bitmap);
}
}
public void read2(View view) {
final MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getRemoteTextAnalyzer();
MLFrame frame = MLFrame.fromBitmap(bitmap);
Task<MLText> task = analyzer.asyncAnalyseFrame(frame);
task.addOnSuccessListener(new OnSuccessListener<MLText>() {
@Override
public void onSuccess(MLText text) {
TextView textView=findViewById(R.id.text_Recog);
textView.setText(text.getStringValue());
Toast.makeText(textActivity.this, text.getStringValue(), Toast.LENGTH_LONG).show();
try {
analyzer.stop();
} catch (IOException e) {
Toast.makeText(textActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
});
}
}
运行后点击SHOT按钮拍照,照片会显示在画面上;然后点击RECOG按钮进行识别。
非华为手机都不能正常运行这个内容。
实时语音识别
如何利用HMS服务实现实时的语音转文字?仍然是机器学习服务的功能。
在文档中浏览到【应用开发/语音语言类服务开发/实时语音识别/开发步骤-实时语音识别(有界面)】,参照下面提示进行。
我们仍然先创建新的Activity用来测试。
1. 集成语音服务
在【Gradle Scripts/build.gradle(Module…)】中添加两个依赖。
implementation 'com.huawei.hms:ml-computer-voice-asr-plugin:2.0.3.300'
2. 添加授权
implementation 'com.huawei.hms:ml-computer-voice-asr:2.0.3.300'
因为语音识别要用到很多权限,所以要在AndroidManifest.xml中添加授权,如果分不清的话就把下面的授权都添加。详细说明地址在【应用开发/开发准备/制定权限】中有详细说明。
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
但只在这里授权还不够,后面还要使用动态授权。
3. 界面代码
<?xml version="1.0" encoding="utf-8"?>
4. 逻辑代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".LangActivity">
<TextView
android:id="@+id/text_lang"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:hint="请先拍照"
android:minHeight="200dp" />
<Button
android:layout_width="200dp"
android:layout_height="100dp"
android:text="GO"
android:onClick="go"/>
</LinearLayout>
public class LangActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lang);
MLApplication.getInstance().setApiKey("CgB6e3x9gLm4...aaxYEnxvjg9");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, 1);
}
public void go(View view) {
// 通过intent进行识别设置。
Intent intent = new Intent(this, MLAsrCaptureActivity.class)
.putExtra(MLAsrCaptureConstants.LANGUAGE, "en-US")
.putExtra(MLAsrCaptureConstants.FEATURE, MLAsrCaptureConstants.FEATURE_WORDFLUX);
startActivityForResult(intent, 100);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
String text = "";
if (requestCode == 100) {
switch (resultCode) {
case MLAsrCaptureConstants.ASR_SUCCESS:
if (data != null) {
Bundle bundle = data.getExtras();
if (bundle != null && bundle.containsKey(MLAsrCaptureConstants.ASR_RESULT)) {
text = bundle.getString(MLAsrCaptureConstants.ASR_RESULT);
TextView textView=findViewById(R.id.text_lang);
textView.setText(text);
}
}
break;
case MLAsrCaptureConstants.ASR_FAILURE:
if(data != null) {
String msg="";
Bundle bundle = data.getExtras();
if(bundle != null && bundle.containsKey(MLAsrCaptureConstants.ASR_ERROR_CODE)) {
int errorCode = bundle.getInt(MLAsrCaptureConstants.ASR_ERROR_CODE);
}
if(bundle != null && bundle.containsKey(MLAsrCaptureConstants.ASR_ERROR_MESSAGE)){
String errorMsg = bundle.getString(MLAsrCaptureConstants.ASR_ERROR_MESSAGE);
msg=errorMsg;
}
if(bundle != null && bundle.containsKey(MLAsrCaptureConstants.ASR_SUB_ERROR_CODE)) {
int subErrorCode = bundle.getInt(MLAsrCaptureConstants.ASR_SUB_ERROR_CODE);
}
Toast.makeText(LangActivity.this,msg,Toast.LENGTH_LONG).show();
}
default:
break;
}
}
}
}
注意这里的ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, 1);是动态添加录音权限。MLApplication.getInstance().setApiKey(“CgB6e3x9gLm4…aaxYEnxvjg9”);是添加ApiKey验证。
运行后点击GO按钮启动语音识别。
非华为手机都不能正常运行这个内容。
内容汇总
使用HMS配置很麻烦,既要遵循官方文档,又要随时解决各种奇怪问题,而且几乎所有功能都是必须在华为手机上才能进行测试。一般要注意下面几点:
本地项目的包名要和线上应用完全一致。
要下载AGC配置文件,放到project模式app根目录。
最好先设置好AGC的几个配置,再配置一遍具体服务。
要修改项目级构建文件,添加classpath和2个maven仓库。
要修改模块级构建文件,添加plugin行,添加各种dependencies。
可能需要给Mainifest配置中添加用户权限,还可能要在每个Activity里重复动态添加权限。
可能需要在Activity里面添加API key信息。
未完待续。
欢迎批评指正,交流学习。