此次做的项目是垃圾分类APP,涵盖内容各类垃圾的分类详情,关于软件的介绍,分享软件,语音识别,基于API搜索。文章末尾附源码,源码全注释。
功能1:等待界面
实现技术:利用线程的延时处理来达到进入APP时等待界面的效果,Thread.sleep(3000);代码延时三秒,三秒结束后通过intent来跳转界面。
功能2:不同类别垃圾的详情和示例
实现技术:在主界面中放置了四个imageButton,还是使用intent方式跳转到对应的详情页,每个类别的垃圾详情主要通过布局直接写入,示例展示则是通过绑定适配器的方式实现,提前搜索符合各个类别的示例垃圾,用数组的方式直接添加信息。另外一行只显示两个适配内容,所以布局是通过网格布局来实现的。利用数组循环添加的主要代码如下:
for(int i=0;i<WetGarbage.length;i++){
Map<String,Object>map=new HashMap<>();
map.put("text",WetGarbage[i]);
data.add(map);
}
功能3:基于API搜索垃圾,并显示所属类别
实现技术:这里封装使用了一个类,Okhttp的方式访问API,检索并返回数据,实现的过程中需要手动导入okhttp3的包,获取数据的方式使用的是GET方式。检索数据时需要带上搜索框输入的名称,匹配到结果后使用handler来接收数据。返回的是json数据,还需要对json数据进行解析。显示结果时还使用了progressDialog来实现搜索过程中的等待效果。
GET方式获取数据的代码如下:
public static void OkHttpGet(String url, Callback callback){
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(callback);
}
Json解析并显示代码如下:
JSONObject js = new JSONObject(json);//网络请求返回的是json数据,这里对json数据进行解析
String n = js.getString("data");
tvSearch.setText(name+": "+n);
功能4:基于谷歌的语音识别显示到搜索框
private void promptSpeechInput(){
Intent intent=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,getString(R.string.speech_prompt));
try{
startActivityForResult(intent,REQ_CODE_SPEECH_INPUT);}
catch (ActivityNotFoundException a){
Toast.makeText(getApplicationContext(),getString(R.string.speech_not_supported),Toast.LENGTH_SHORT).show();
}
}
protected void onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode,resultCode,data);
switch (requestCode){
case REQ_CODE_SPEECH_INPUT:{
if(resultCode==RESULT_OK&&null!=data){
ArrayList<String>result=data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
editText.setText(result.get(0));
}
break;
}
}
}
功能5:“关于软件详情”页面的图片滑动效果
实现技术:图片左右滑动效果主要是通过绑定一个ViewPager适配器来展示的,可以手动左右滑动图片,也可以延时自动播放下一张图片。
手动滑动图片的核心代码如下:
private void setVPListener() {
/* 设置ViewPager的监听器*/
aboutVp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
for (int i = 0; i < pointList.size(); i++) {
pointList.get(i).setImageResource(R.mipmap.a2);
}
pointList.get(position%pointList.size()).setImageResource(R.mipmap.a3);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
功能6:“关于软件详情”页面分享软件
实现技术:这里主要是调用系统自带的分享功能,通过QQ、微信等方式分享给好友一个message,实现代码如下所示:
public void onClick(View v) {
// 调用系统自带的分享功能
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
String msg= "垃圾分类非常的重要,了解垃圾的分类规则,处理方式,想要了解更多么,快来下载垃圾分类app吧~~";
intent.putExtra(Intent.EXTRA_TEXT,msg);
startActivity(Intent.createChooser(intent,"垃圾分类"));
}
功能7:按键音效
实现技术:写了一个初始化音效和播放音效的函数,
private SoundPool soundPool;//声明一个SoundPool
private int soundID;//创建某个声音对应的音频ID
先声明所需要的用到的id,方法的代码如下所示:
@SuppressLint("NewApi")
private void initSound() {//音乐初始化方法
soundPool = new SoundPool.Builder().build();
soundID = soundPool.load(this, R.raw.click_music, 1);//加载对应的因为文件
}
private void playSound() {
soundPool.play(
soundID,
0.1f, //左耳道音量【0~1】
0.5f, //右耳道音量【0~1】
0, //播放优先级【0表示最低优先级】
1, //循环模式【0表示循环一次,-1表示一直循环,其他表示数字+1表示当前数字对应的循环次数】
1 //播放速度【1是正常,范围从0~2】
);
}
附上源码链接:https://download.csdn.net/download/Tank_548/12682162
这是作为小白做的第一个APP,做的不好希望大家指点一下。代码量不大,适用于大二大三学生一到两个人的期末小项目。