【北京迅为】iTOP-4412全能版使用手册-第一百零二章 Android 4.0典型功能相关源码修改及定制

iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、陀螺仪、CAN总线、RS485总线、500万摄像头等模块,稳定运行Android 4.0.3/Android 4.4操作,系统通用Linux-3.0.15+Qt操作系统(QT支持5.7版本),Ubuntu版本:12.04,接口智能分配 方便好用。

【交流群2】258811263(获取开源资料)

【迅为B站】北京迅为电子的个人空间-北京迅为电子个人主页-哔哩哔哩视频


第一百零二章 Android 4.0典型功能相关源码修改及定制

102.1 iTOP-4412-Android4.0-更改默认休眠时间

Android 默认休眠时间是可以修改的,下面以将开发板休眠时间修改成无限长为例来讲解具体怎么操作。如下图,打开 Android 源码中的文件

frameworks/base/packages/SettingsProvider/res/values/defaults.xml

 

找到“<integer name="def_screen_off_timeout">600000</integer>”这一行,这里单位是 ms,下图中是 10 分钟后休眠,如果改成-1 则不休眠。 

 

102.2 去掉默认安装的APK

在 Android 文件系统中,默认安装了一些应用程序,如果有不需要的可以将其去掉,本小节和下一小节结合了来使用。

如下图所示,在 Android 源码目录“device/samsung/smdk4x12/apk”中,有一些默认的应用程序。

 

102.3 将APK编译到Android镜像中

上一小节中,讲到如何去掉默认安装的 APK,如果用户需要将 APK 编译到 Android 镜像中,除了需要将 APK 拷贝到“device/samsung/smdk4x12/apk”目录中,还需要添加安装脚本。

如下图所示,安装 APK 的脚本是“device/samsung/smdk4x12/device.mk”,我们以led 为例。

如下图所示,这两行脚本是与 led 相关的。首先将 ledtest.apk 放到对应的文件夹中。其次,ledtest 需要一个库文件,这个库文件也要放到对应的文件夹中。

如果是其它的 APK,可以参照 ledtest 的脚本。

 

102.4手机和平板模式(横屏竖屏)

在 Android 系统中,有手机和平板两种模式。可以通过修改 Android 代码,改变开发板的模式。

如下图所示,切换手机模式和平板模式的文件是“device/samsung/smdk4x12/BoardConfig.mk”,打开该文件。

 

找到文件中的参数“BOARD_USES_HIGH_RESOLUTION_LCD”,如下图所示,如果变量设置为“true”,则是对应平板模式,如果是“false”,则对应手机模式 

 

102.5 设置Android的GPS

开发板支持两种 GPS 模块,分别为 GNS7560 和 UBLOX,下面讲解一下代码里面怎么选择对应的驱动。

这两种 GPS 模块都是通过串口来传输数据的,linux 内核里面已经支持串口的驱动了,所以我们需要修改的只是 android 代码,通过配置对应的宏来选择支持我们使用的 GPS,进入到 “iTop4412_ICS” android 的源码目录,如下图。

 

然后输入“vi device/samsung/smdk4x12/BoardConfig.mk”命令,如下图。 

 

然后在 BoardConfig.mk 文件里面找到“BOARD_HAVE_GNS7560 := false”,如下图。 

 

如果使用 GNS7560 模块,需要把这行改成:

BOARD_HAVE_GNS7560 := true

如果使用 UBLOX 模块,需要把这行改成:

BOARD_HAVE_GNS7560 := false

修改完成以后,保存并退出。然后在终端依次输入下面的两条编译命令:

make clobber

./build_android.sh

重新编译 android 就可以了,最后会生成的 Android 镜像就可以支持对应的 GPS。

 

102.6 设置Android的HDMI转VGA

在 Android 源码目录(iTop4412_ICS)下打开文件“device/samsung/smdk4x12/BoardConfig.mk”,找到“BOARD_HDMI_STD := STD_1080P”,如下图。

 

然后把这一行修改为:”BOARD_HDMI_STD := STD_480P_TOPEET“,如下图所示: 

 

然后退出并保存。如果以前编译过 Android,需要执行下面的命令删除编译生成的一些中间文件,如下图所示。 

 

然后执行“./build_android.sh”编译 Android,如下图所示。 

 

编译完成后,最后把生成的镜像烧写到开发板上。 

102.7 设备节点权限的修改

在 Android 下调用设备内核驱动的设备节点的时候,会遇到没有权限的问题,这个时候需要修改一下设备权限。下面以串口为例介绍一下,其它的设备修改方法也类似。

在 android 下操作串口有时会遇到没有权限的问题,这就需要修改下 android 的启动脚本,在里面修改下串口的权限。

在 android 源码目录下输入“vi device/samsung/smdk4x12/conf/init.smdk4x12.rc”,如下图所示。

 

在里面找到修改权限的地方,如下图所示。 

 

上面的“chmod 777 xxxx”就是修改设备节点的权限,比如我们现在想修改串口 0(/dev/ttySAC0)的权限,那我们在这下面输入“chmod 777 /dev/ttySAC0”就可以了, 如下图所示。 

 

其他几个串口的修改方法也是这样的,修改完以后,保存并退出,回到 android 源码的目录下面,如下图所示。 

 

然后输入“./build_android.sh ”开始编译 android,如下图所示。 

编译完成后,把生成的“ramdisk-uboot.img”和“system.img”烧到开发板里面,重新启动 android,就可以看到串口 0(/dev/ttySAC0)的权限修改了。

102.8 Android系统VGA显示时横竖屏切换方法

Android 系统使用 VGA 显示时,默认是横屏,需要修改为竖屏(11.9.4 修改对 VGA 显示无效)。

修改 android 源码“device/samsung/smdk4x12/system.prop”文件里面的ro.sf.hwrotation 参数。默认参数值 270 设置为 0,VGA 显示正常。

102.9 Android 4.0通过脚本实现IP地址的设置

本章介绍修改源码,使系统启动时执行一个脚本来设置有线网 ip:

n 编写 shell 脚本 iTop4412_ICS/device/samsung/smdk4x12/myinit.sh,注意开头一定要是”#! /system/bin/sh“,内容如下:

#! /system/bin/sh
echo “This shell added by Pojun” 
ifconfig eth0 192.168.1.130

修改脚本 iTop4412_ICS/device/samsung/smdk4x12/device.mk,增加一行, 使编过程中将myinit.sh 拷贝到镜像文件中,目标路径为/system/bin:

PRODUCT_COPY_FILES += \
device/samsung/smdk4x12/myinit.sh:system/bin/myinit.sh

修改源代码中的启动脚本“iTop4412_ICS/system/core/rootdir/init.rc “,在末尾添加 service 定义:

service myinit /system/bin/myinit.sh 
class main
user root 
group root
oneshot

重新编译只要两分钟

n 将重新编译的 android 镜像烧写到开发板(注意,只需要烧写android 系统镜像就可以了),重新启动后,查看 ip 地址:

Ip a

显示eth0 的 ip 地址为 192.168.1.130,OK!

102.10 Android 4.0讯飞语音第三方库

资料包全称是“iTOP-4412-Android4.0 讯飞语音第三方库的使用.rar”,介绍了Android4.0 讯飞语音第三方库的使用过程。在网盘“iTOP4412开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\Android模块测试例程\iTOP-4412-Android4.0讯飞语音第三方库的使用.rar” 目录下可找到配套资料。

讯飞语音Demo简介(第三方库)

1.百度上搜索讯飞开放平台,如图1所示

2. 注册一下账户,然后下载其相关的Android SDK 如图2所示,在此我以“语音+(语记)”写为例。(温馨提示,可以把组合服务SDK下载中的“语音听写”、“在线语音合成”也一并下载了) 

 3.解压下载得到的SDK 里面会有一个sample 文件,里面有三个demo,直接导入eclipse中就可以使用,如图3所示,读者可以参考着官方给出的例子来做。

 

4.下面呢介绍的是自己写一个简单的Demo,将文字转换为语音。新建一个项目工程

1)导入SDK 将官网中下载好的压缩包中的libs目录下的所有文件拷贝到工程目录中的libs 目录中,如图所示

  1. 在AndroidManifest.xml中添加用户权限

<uses-permission android:name="android.permission.RECORD_AUDIO" />

    <uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <uses-permission android:name="android.permission.READ_CONTACTS" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 <uses-permission android:name="android.permission.WRITE_SETTINGS" />

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

3)初始化如图4所示 ,

APPID 是你在申请SDK时得到的如图所示, 

输入语音UI,在此可以使用SDK资源包中的assets文件中的资源文件如图所示,这一步可以做,可以不做。 

 

5)添加代码

 FlowerCollector.onResume(Context)  和 onResume(context),destory();如图所示

 

1、设置一些基本的参数

private SpeechSynthesizer mTts;

 private EditText et_text;

 private int mPercentForBuffering = 0;

 // 播放进度

 private int mPercentForPlaying = 0;

 // 引擎类型

 private String mEngineType =  SpeechConstant.TYPE_LOCAL;

 // 默认发音人

 private String voicer = "xiaoyan";

 private String voicer2="xiaomei";

2、Button 中的监听内容是

 btn_speak.setOnClickListener(new View.OnClickListener() {

  @Override

  public void onClick(View arg0) {

   //String text = "讯为科技,你多打听打听";

   String text=et_text.getText().toString().trim();

   if(text.equals(null))

   {

    //showTip("内容是空的,请输入内容");

    return;

   }  

   // 设置参数

   setParam();

   int code = mTts.startSpeaking(text, mTtsListener);

  }

 });

3、初始化监听

 private InitListener mTtsInitListener = new InitListener() {

  @Override

  public void onInit(int code) {

   Log.d(TAG, "InitListener init() code = " + code);

   if (code != ErrorCode.SUCCESS) {

          showTip("初始化失败,错误码:"+code);

         } else {

    // 初始化成功,之后可以调用startSpeaking方法

          // 注:有的开发者在onCreate方法中创建完合成对象之后马上就调用startSpeaking进行合成,

          // 正确的做法是将onCreate中的startSpeaking调用移至这里

   }  

  }

 };

  1. 合成回调监听

 private SynthesizerListener mTtsListener = new SynthesizerListener() {

  

  @Override

  public void onSpeakBegin() {

   showTip("开始播放");

  }

  @Override

  public void onSpeakPaused() {

   showTip("暂停播放");

  }

  @Override

  public void onSpeakResumed() {

   showTip("继续播放");

  }

  @Override

  public void onBufferProgress(int percent, int beginPos, int endPos,

    String info) {

   // 合成进度

   mPercentForBuffering = percent;

   showTip(String.format("缓冲进度为%d%%,播放进度为%d%%",

     mPercentForBuffering, mPercentForPlaying));

  }

  @Override

  public void onSpeakProgress(int percent, int beginPos, int endPos) {

   // 播放进度

   mPercentForPlaying = percent;

   showTip(String.format("缓冲进度为%d%%,播放进度为%d%%",

     mPercentForBuffering, mPercentForPlaying));

  }

  @Override

  public void onCompleted(SpeechError error) {

   if (error == null) {

    showTip("播放完成");

   } else if (error != null) {

    showTip(error.getPlainDescription(true));

   }

  }

  @Override

  public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {

   // 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因

   // 若使用本地能力,会话id为null

   // if (SpeechEvent.EVENT_SESSION_ID == eventType) {

   //  String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID);

   //  Log.d(TAG, "session id =" + sid);

   // }

  }

 };

5、setParam 为设置参数 语音的一些参数

private void setParam(){

  // 清空参数

  mTts.setParameter(SpeechConstant.PARAMS, null);

  // 根据合成引擎设置相应参数

  if(mEngineType.equals(SpeechConstant.TYPE_CLOUD)) {

   mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);

   // 设置在线合成发音人

   mTts.setParameter(SpeechConstant.VOICE_NAME, voicer);

   //设置合成语速

   mTts.setParameter(SpeechConstant.SPEED, "50");

   //设置合成音调

   mTts.setParameter(SpeechConstant.PITCH, "50");

   //设置合成音量

   mTts.setParameter(SpeechConstant.VOLUME, "50");

  }else {

   mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);

   // 设置本地合成发音人 voicer为空,默认通过语记界面指定发音人。

   mTts.setParameter(SpeechConstant.VOICE_NAME, null);

   /**

    * TODO 本地合成不设置语速、音调、音量,默认使用语记设置

    * 开发者如需自定义参数,请参考在线合成参数设置

    */

  }

  //设置播放器音频流类型

  mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");

  // 设置播放合成音频打断音乐播放,默认为true

  mTts.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "true");

  

  // 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限

  // 注:AUDIO_FORMAT参数语记需要更新版本才能生效

  mTts.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");

  mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, Environment.getExternalStorageDirectory()+"/msc/tts.wav");

 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值