android从放弃到精通 第七天 tomorrow
感觉还好,一直像写日记一样写自己的每日,到现在还没有被人喷...其实没事的,我写的不好,写的差,那也是我自己看看的,要想看写的好的大神,隔壁左转,太多太多了= =
20171211
8-1 语音播报-科大讯飞TTS引擎实现语音聊天
为了避免之前的尴尬,我还是打算直接查看当前部分内容的错误修改,这样还节省时间= =
美女社区加载多图OOM
这个我们可以做很多的优化方式,最常用的是加入缓存,这里我们也可以降低降低加载图片的色值,所以在工具类中我们可以使用这样更改
//默认加载图片(制定大小)
public static void loadImageViewSize(Context context, String url, int width, int height, ImageView imageView) {
Picasso.with(context).load(url).config(Bitmap.Config.RGB_565).resize(width, weight).centerCrop().into(imageView);
}
好了,貌似没有相关的问题,这里放心开始开发了
官网:www.xfyun.cn,在讯飞进行应用的创建,获取对应appid储存到对应的StaticClass的常量之中,使用在线语音合成的服务(免费)
下载对应SDK,在app-libs中拷入对应的jar包并addAsActivity(这里有两个文件)
在main目录下新建jinLibs文件夹,用于专门存放兼容库
添加本地仓库,在app.gradle里面
repositories {
flatDir {
dirs 'libs'
}
}
找到资料库中的开发文档,这里使用的是语音合成的功能
导入权限,删除重复的权限,接下来就使用官方文档进行开发
考虑过,如果项目还有一部分还没有开发,但是又一定会开发的时候,点击一些按钮,虽然没有做相关的功能,但是还是希望给用户提供一些信息,让用户知道自己的点击是有效的,而不是以为软件很卡而在那里干等,这些就是使用baseactivity的目的,我希望在baseactivity里面设置一个变量,如果该功能还处于开发状态,该变量设置为false,当需要打开对应的模块的时候就获取对应模块的该参数的值,如果是false那么就直接不启动该activity并给出相应的提示信息,如果还需要再一步进行完善的情况下感觉应该直接使用单例模式会比较好吧
在完成了对应的语音听写功能之后就来到了最最最为关键的部分了,就是设置界面,这里希望在设置界面有一个switch组件,通过滑动组件的位置,可以直接打开或者关闭对应的功能,这方面说到底其实也只是纸老虎罢了,第一反应我还以为会用到eventbus之类的组件,但是万万让我没有想到的事情是,需要实现这个使用sharedpreference就完完全全足够了,哈哈哈,我做人真的是好失败啊= =
比较耗时间的操作: 网络 IO 数据库 等等
遇到了一道坎,这里需要特别注明一下,首先,在布局的初始化定义的时候是使用setChecked进行布局的初始化操作,但是在之后的点击按钮对应的切换状态的操作的时候,使用的是setSelected(isSelected()),然后在保存状态的时候又使用的是checked的操作,这就很尴尬了= =
8-2 短信提醒-自定义广播接收器监听短信
开关按钮依然是在设置界面进行操作 对应组件的文字依然是短信智能提醒-开启之后收到短信弹出窗口预览-switch object
学会如何使用动态注册短信的广播
1.关于switch的动态切换方法是与之前的切换方式相同,一来selected,checked,sp进行操作,如果打开了对应的开关,那么就开启对应的服务,关闭逻辑类似
2.在讲的之前的操作的时候就已经执行了对应的smsService文件的创建工作,后面再看看他准备工作的时候具体做了什么,貌似只创建了一个SmsService类,并让其继承service,并在配置文件(manifeast)中声明
3.因为对于service我也不是特别熟悉,所以这里想给出比较详细的记录
首先,在onCreate();中创建initService操作
4.在init()中进行动态注册的操作
smsReceiver = new SmsReceiver();
IntentFilter intent = new IntentFilter();
intent.addAction(StaticClass.SMS_ACTION);
//短信action "android.provider.Telephony.SMS_RECEIVED"
//设置权限
intent.setPriority(Integer.MAXVALUE);
registerReceiver(smsReceiver, intent);
//在destroy方法中设置取消方法
unregisterReceiver(smsReceiver);
//在类中直接进行相关receiver类的定义
public class SmsReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(StaticClass.SMS_ACTION.equals(action)) {
L.i("来短信了");
}
}
}
//短信权限的添加,虚拟机可以进行短信接收的模拟
name="android.permission.RECEIVE_SMS"
在service类中定义两个变量发件人号码,和短信的内容
//获取短信内容返回的是一个Object数组
Object[] objs = (Object[])intent.getExtras().get("pdus");
//遍历数组得到相关的数据
for(Object obj:objs) {
//把数组元素转化成短信对象
SmsMessage sms = SmsMessage.createFromPdu(byte[] obj);
smsPhone = sms.getOriginatingAddress();
//内容
smsContent = sms.getMessageBody();
}
//感觉不早了,但是今天的东西还有一块比较重要的事情还没有完成,这点就比较尴尬了,今天的博客就先到这里吧,毕竟希望坚持一天一篇的目标 = =,晚安
android从放弃到精通 第七天 tomorrow相关推荐
- android从放弃到精通 第四天 happy
android从放弃到精通 第四天 happy 来兑现昨天的承诺了(虽然还是昨天,没想到解决的这么快),我来总结一下这两天的所学所想了,这两天触碰了我以前一直不敢触碰的两样东西,自定义组件还有文件存取 ...
- android从放弃到精通 第三天 我还活着
android从放弃到精通 第三天 我还活着 今天真的注定是坎坷的一天,在各种方面都是这种感觉,感觉网上的教程有点-怎么说好呢..他自己的代码,自己改过了,但是以为自己已经讲过了,然后就拿过来直接用, ...
- android从放弃到精通 第一天 重拾项目开发
android从放弃到精通 第一天 个人还是比较乐观的,虽然当前android的就业形势不容乐观,但是我感觉,喜欢一种东西是没有理由的,那么游戏就开始了. 今天是重归android的第一天,涉猎的以下 ...
- android从放弃到精通第11天 勿忘初心
9-2地图拓展-百度地图API的集成 地图在模拟器上会出现一些问题,所以使用真机会比较好 地图,地图覆盖物,定位 第一步,下载JAR包 我的位置 时刻掌握自身位置LinearLayout 设置点击事件 ...
- android从放弃到精通 第九天 勿忘初心
8-8下载更新-版本更新接口数据解析 单纯使用了系统的dialog,将两个文件传输人带到tomcat配置文件夹的WEB-APP文件夹中,这两个文件分别是安装包和安装包信息的JSON文件(包含了安装包信 ...
- android从放弃到精通 第八天 freedom
8-3短信提醒-自定义短信弹框提醒 //0关于前面的短信提醒接收不到的问题,有一点需要牢记在心,android6.0以上版本的权限问题, ,至少在当前的情况下,在android8.0的虚拟机上解决相应 ...
- android从放弃到精通 第六天 excellent
今天有是美好和十分充实的一天,很多时候都这么感觉,哈哈哈,那么游戏开始了= = 看了这门课程我越来越搞不懂是什么时候要用handler兄弟进行操作了= =,网站的get和post请求用不到吗...真的 ...
- android从放弃到精通 第五天 excellent
4-1快递查询-RxVolley获取接口数据 物流,时间轴实现 物流信息使用聚合数据进行获取,免费的操作次数为100次,足够用来进行开发功能 获取AppKey,并保存到StaticClass中,通过w ...
- Android从放弃到精通 第二天 我还好
今天发现野生的大神一只,毫不犹豫将我唯一的大师球投了出去,但是很遗憾,被秒逃脱= = 一只对git有不可磨灭的阴影,在各种时候的不愿去触碰它,但是在经过激烈的思想斗争之后,我还是毅然的选择了去拥抱它. ...
最新文章
- Python3 内置http.client,urllib.request及三方库requests发送请求对比
- TensorFlow tf.data 导入数据(tf.data官方教程) * * * * *
- QML基础类型之real
- MongoDB存储文件之GridFS
- 自动给 Asp.Net Core Api 增加 ApiVersionNeutral
- android发送网络请求没反应,Android无法使用HttpURLConnection发送GET请求
- c 如何操作php,thinkphp的c方法使用示例
- linux公司常用基础命令必知必会一
- Spring各模块的功能及互相之间的关系
- matlab画平滑曲线的两种方法
- 全国各地电台在线收听大全(转)
- 沟通中的情绪管理(演讲稿)
- 尚福林:建立集团诉讼和股东代表诉讼制度
- 读史鉴今:女人的12种结局
- Ubuntu下连接红米2无法找到设备解决方案
- oracle中的表别名怎么,Oracle 表别名
- PandoraBox登录无法后台,出现/usr/lib/lua/luci/dispatcher.lua:461(2021-12-19亲测)
- 24点计算器c语言源代码,萌新求助!!24点游戏计算器
- wix log_如何正确地从Wix切换到WordPress(逐步操作)
- 042-16 Backup and Recovery备份与恢复(前3种备份方式)
热门文章
- java写一个外网访问的接口_【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)...
- finalshell连接超时怎么解决_电脑无线网络连接不上怎么回事 电脑连不上无线网络的解决方法...
- ateq测漏仪f620说明书_手环测漏仪规格齐全-同江
- 第二讲,我们来谈谈:“什么是二进制”
- nginx 错误502 upstream sent too big header while reading response header from upst
- 2015年的计算机二级考试题,2015年计算机二级考试《VFP》精选上机练习题
- iphone个系列尺寸_iPhone 12尺寸对比:又是真香的典范?
- oracle离线文档查dbms_小白小记-logminer工具分析离线归档日志
- python中 s是什么意思_什么是Pandas?Pandas学习什么?
- java 同步块 抛出异常_不把 wait 放在同步块中,为啥这种情况不会抛出 IllegalMonitorStateException?...