您的位置:首页 > 移动开发 > Android开发

android从放弃到精通 第七天 tomorrow

2017-12-11 23:03 295 查看
感觉还好,一直像写日记一样写自己的每日,到现在还没有被人喷...其实没事的,我写的不好,写的差,那也是我自己看看的,要想看写的好的大神,隔壁左转,太多太多了= =

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();

}

//感觉不早了,但是今天的东西还有一块比较重要的事情还没有完成,这点就比较尴尬了,今天的博客就先到这里吧,毕竟希望坚持一天一篇的目标 = =,晚安
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: