android设计报告参考精
Android课程设计报告模板

android移动开发课程设计报告学生姓名:X X 学号:XXXXXXX 专业:计算机科学与技术班级:XXXXXXX 设计题目:口袋微博学年学期:2015 年秋季学期指导教师:X X目录(示例)一、设计题目 (1)二、设计目的 (1)三、设计原理及方案 (1)1使用的软件工具和环境 (1)2需求分析与概要设计 (1)3数据库设计(若有) (2)4详细设计和关键问题 (3)四、实现效果 (8)五、设计体会 (69)参考文献 (71)一、设计题目Android社交分享平台——口袋微博设计目的二、设计原理及方案首先要实现以下这些功能:Android端登录和注册模块的实现Android端个人中心模块的实现Android端快速发布模块的实现Android端查看联系人模块的实现Android端管理日志模块的实现Android端管理相册模块的实现1使用的软件工具和环境1)PC计算机2)JDK安装包3)Eclipse安装包4)Android SDK安装包5)ADT插件2需求分析与概要设计(详细描述系统的功能需求)Android端登录和注册模块的实现Android端个人中心模块的实现Android端快速发布模块的实现Android端查看联系人模块的实现Android端管理日志模块的实现Android端管理相册模块的实现(详细描述系统结构;例如总体架构设计、流程图、用例图等,并分别描述)说明:这里的用例图和类图的对应关系可以在下面的E-R图上找到,这里我就略了一下。
Android端总体架Web端的原理示意图数据库设计(若有的必须给出,没有的给出其他重要设计过程)(给出ER关系图及数据库表)用powerdesigner设计对应关系,并生成表,E-R图3详细设计和关键问题(分功能模块描述设计细节,例如详细功能图、类图和关键流程图等。
遇到的关键Android 问题是如何解决的)相册列表:功能图查看修改权限二、快速发布:三、实现效果(包括系统描述和程序运行界面的截图)1.口袋微博用户登录界面2.口袋微博个人中心——快速发布功能界面3.口袋微博个人中心——我的好友功能界面4.口袋微博个人中心——最近访客功能界面5.口袋微博个人中心——日志列表功能界面6.口袋微博个人中心——相册列表功能界面7.口袋微博——搜索好友界面以下是部分重要代码由于代码太多无法容纳(1)LoginActivity.java登录界面package wyf.wpf;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS; import static wyf.wpf.ConstantUtil.SERVER_PORT; import android.app.Activity;import android.app.ProgressDialog;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.os.Looper;import android.view.View;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.ImageButton;import android.widget.Toast;public class LoginActivity extends Activity {MyConnector mc = null;ProgressDialog pd;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.login);checkIfRemember();Button btnLogin = (Button)findViewById(R.id.btnLogin);btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {pd = ProgressDialog.show(LoginActivity.this, "请稍候", "正在连接服务器...", true, true);login();}});Button btnReg = (Button)findViewById(R.id.btnReg);btnReg.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(LoginActivity.this, wyf.wpf.RegActivity.class);startActivity(intent);finish();}});ImageButton ibExit = (ImageButton)findViewById(R.id.ibExit);ibExit.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {android.os.Process.killProcess(android.os.Process.myPid()); //结束进程,退出程序}});}//方法:连接服务器进行登录public void login(){new Thread(){public void run(){Looper.prepare();try{if(mc == null){mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);}EditText etUid = (EditText)findViewById(R.id.etUid); //获得帐号EditTextEditText etPwd = (EditText)findViewById(R.id.etPwd); //获得密码EditTextString uid = etUid.getEditableText().toString().trim(); //获得输入的帐号String pwd = etPwd.getEditableText().toString().trim(); //获得输入的密码if(uid.equals("") || pwd.equals("")){ //判断输入是否为空Toast.makeText(LoginActivity.this, "请输入帐号或密码!", Toast.LENGTH_SHORT).show();//输出提示消息return;}String msg = "<#LOGIN#>"+uid+"|"+pwd; //组织要返回的字符串mc.dout.writeUTF(msg); //发出消息String receivedMsg = mc.din.readUTF(); //读取服务器发来的消息pd.dismiss();if(receivedMsg.startsWith("<#LOGIN_SUCCESS#>")){ //收到的消息为登录成功消息receivedMsg = receivedMsg.substring(17);String [] sa = receivedMsg.split("\\|");CheckBox cb = (CheckBox)findViewById(R.id.cbRemember); //获得CheckBox 对象if(cb.isChecked()){rememberMe(uid,pwd);}//转到功能面板Intent intent = new Intent(LoginActivity.this,FunctionTabActivity.class);intent.putExtra("uno", sa[0]);startActivity(intent); //启动功能Activityfinish();}else if(msg.startsWith("<#LOGIN_FAIL#>")){ //收到的消息为登录失败Toast.makeText(LoginActivity.this, msg.substring(14), Toast.LENGTH_LONG).show();Looper.loop();Looper.myLooper().quit();}}catch(Exception e){e.printStackTrace();}}}.start();}//方法:将用户的id和密码存入Preferencespublic void rememberMe(String uid,String pwd){SharedPreferences sp = getPreferences(MODE_PRIV ATE); //获得PreferencesSharedPreferences.Editor editor = sp.edit(); //获得Editoreditor.putString("uid", uid); //将用户名存入Preferenceseditor.putString("pwd", pwd); //将密码存入Preferencesmit();}//方法:从Preferences中读取用户名和密码public void checkIfRemember(){SharedPreferences sp = getPreferences(MODE_PRIVA TE); //获得PreferencesString uid = sp.getString("uid", null);String pwd = sp.getString("pwd", null);if(uid != null && pwd!= null){EditText etUid = (EditText)findViewById(R.id.etUid);EditText etPwd = (EditText)findViewById(R.id.etPwd);CheckBox cbRemember = (CheckBox)findViewById(R.id.cbRemember);etUid.setText(uid);etPwd.setText(pwd);cbRemember.setChecked(true);}}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();}super.onDestroy();}}(2)DirayActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS; import static wyf.wpf.ConstantUtil.SERVER_PORT;import java.util.ArrayList;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import android.widget.AdapterView.OnItemClickListener;public class DiaryActivity extends Activity{ArrayList<String []> diaryList = new ArrayList<String []>();MyConnector mc = null;String uno = null;String visitor = null;BaseAdapter ba = new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {LinearLayout ll = new LinearLayout(DiaryActivity.this);TextView tvTitle = new TextView(DiaryActivity.this);ll.setOrientation(LinearLayout.VERTICAL);tvTitle.setTextAppearance(DiaryActivity.this, R.style.title);tvTitle.setGravity(Gravity.LEFT); //设置TextView的对齐方式tvTitle.setText(diaryList.get(position)[1]);TextView tvContent = new TextView(DiaryActivity.this);tvContent.setTextAppearance(DiaryActivity.this, R.style.content); //设置字体大小tvContent.setGravity(Gravity.LEFT); //设置TextView的对齐方式tvContent.setText(diaryList.get(position)[2]); //设置显示的内容ll.addView(tvTitle);ll.addView(tvContent);return ll;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int arg0) {return null;}@Overridepublic int getCount() {return diaryList.size();}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = getIntent();uno = intent.getStringExtra("uno"); //获得主人IDvisitor = intent.getStringExtra("visitor"); //获得访客IDgetDiaryList();setContentView(yout.diary);ListView lvDiary = (ListView)findViewById(R.id.lvDiary); //获得ListView对象lvDiary.setAdapter(ba);lvDiary.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View v, int position,long id) {Intent intent = new Intent(DiaryActivity.this,CommentActivity.class);intent.putExtra("rid", diaryList.get(position)[0]);intent.putExtra("uno", uno);intent.putExtra("visitor", visitor);startActivity(intent);}});}//方法:获取日志列表public void getDiaryList(){new Thread(){public void run(){try{mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);mc.dout.writeUTF("<#GET_DIARY#>"+uno+"|"+"1");int size = mc.din.readInt(); //读取日志的长度for(int i=0;i<size;i++){ //循环接受日志信息String diaryInfo = mc.din.readUTF(); //读取日志信息String [] sa = diaryInfo.split("\\|");diaryList.add(sa); //将日志信息添加到列表中}}catch(Exception e){e.printStackTrace();}}}.start();}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();mc = null;}super.onDestroy();}}(3)口袋微博_____个人中心PublishActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.*;import android.app.Activity;import android.app.AlertDialog;import android.app.ProgressDialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.os.Looper;import android.view.Gravity;import youtInflater;import android.view.View;import android.view.ViewGroup;import youtParams;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;public class PublishActivity extends Activity{String [] items = { //存放ListView中的选项内容"更新心情","发布日志","拍照上传"};int [] imgIds = {R.drawable.p_status,R.drawable.p_diary,R.drawable.p_shoot};String uno = null; //存放MyConnector mc = null; //MyConnector对象引用ProgressDialog pd = null; //ProgressDialog对象引用View dialog_view = null; //心情BaseAdapter ba = new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {LinearLayout ll = new LinearLayout(PublishActivity.this);ll.setOrientation(LinearLayout.HORIZONTAL);ll.setGravity(Gravity.CENTER);ImageView iv = new ImageView(PublishActivity.this); //创建ImageView对象iv.setAdjustViewBounds(true);iv.setImageResource(imgIds[position]); //设置ImageView的ll.addView(iv); //将ImageView添加到线性布局中TextView tv = new TextView(PublishActivity.this);tv.setPadding(10, 0, 0, 0);tv.setLayoutParams(new youtParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));tv.setTextAppearance(PublishActivity.this, R.style.title);tv.setText(items[position]); //设置TextView显示的内容ll.addView(tv);return ll;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic int getCount() {return items.length;}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = getIntent(); //获得启动该Activity的Intentuno = intent.getStringExtra("uno");setContentView(yout.publish); //设置当前屏幕ListView lvPublish = (ListView)findViewById(R.id.lvPublish); //获得ListView对象引用lvPublish.setAdapter(ba);lvPublish.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View v, int position,long id) {switch(position){ //判断点击的是哪一个选项case 0: //更新心情LayoutInflater li = LayoutInflater.from(PublishActivity.this);dialog_view = li.inflate(yout.publish_status, null);new AlertDialog.Builder(PublishActivity.this).setTitle("更新心情").setIcon(R.drawable.p_status).setView(dialog_view).setPositiveButton("发表",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {pd = ProgressDialog.show(PublishActivity.this, "请稍候", "正在更新心情...",true,true);updateStatus();}}).setNegativeButton("取消",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}).show();break;case 1: //发表日志Intent intent1 = new Intent(PublishActivity.this,PublishDiaryActivity.class);//创建Intentintent1.putExtra("uno", uno); //设置Intent的Extra字段startActivity(intent1);break;case 2: //拍照上传Intent intent2 = new Intent(PublishActivity.this,ShootActivity.class);//创建Intentintent2.putExtra("uno", uno); //设置Intent的Extra字段startActivity(intent2);break;}}});}//方法:连接服务器,更新心情public void updateStatus(){new Thread(){public void run(){Looper.prepare();EditText etStatus = (EditText)dialog_view.findViewById(R.id.etInputStatus);String status = etStatus.getEditableText().toString().trim(); //获得心情内容if(status.equals("")){ //如果输入的心情为空pd.dismiss();Toast.makeText(PublishActivity.this, "请输入更新的心情", Toast.LENGTH_LONG).show();//输出提示Looper.loop();return;}String message = "<#NEW_STA TUS#>"+status+"|"+uno;if(mc == null){mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);}try{mc.dout.writeUTF(message); //向服务器发送更新的心情pd = ProgressDialog.show(PublishActivity.this, "正在连接网络", "请稍候",true);String reply = mc.din.readUTF(); //从服务器返回的回复pd.dismiss();if(reply.equals("<#STA TUS_SUCCESS#>")){ //心情更新成功Toast.makeText(PublishActivity.this, "心情更新成功!", Toast.LENGTH_LONG).show();Looper.loop();}else { //心情更新失败Toast.makeText(PublishActivity.this, "心情更新失败!", Toast.LENGTH_LONG).show();Looper.loop();}}catch(Exception e){e.printStackTrace();}Looper.myLooper().quit();}}.start();}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();}super.onDestroy();}}(4)注册处理____RegActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS;import static wyf.wpf.ConstantUtil.SERVER_PORT;import android.app.Activity;import android.app.ProgressDialog;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.Toast;public class RegActivity extends Activity{MyConnector mc = null; //声明MyConnector对象String uno = ""; //记录用户的IDProgressDialog pd= null; //声明进度对话框Handler myHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch(msg.what){case 0:View linearLayout = (LinearLayout)findViewById(R.id.regResult); //获得线性布局linearLayout.setVisibility(View.VISIBLE); //设置可见性EditText etUno = (EditText)findViewById(R.id.etUno);etUno.setText(uno);break;}super.handleMessage(msg);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.reg); //设置当前屏幕Button btnReg = (Button)findViewById(R.id.btnReg); //获得注册Button按钮对象btnReg.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {pd = ProgressDialog.show(RegActivity.this, "请稍候...", "正在连接服务器...", false);register();}});Button btnBack = (Button)findViewById(R.id.btnBack); //获得返回按钮对象btnBack.setOnClickListener(new View.OnClickListener() { //为返回按钮添加监听器@Overridepublic void onClick(View v) {Intent intent = new Intent(RegActivity.this,LoginActivity.class); //创建Intent对象startActivity(intent); //启动Activityfinish();}});Button btnEnter = (Button)findViewById(R.id.btnEnter); //获得进入功能面板按钮对象btnEnter.setOnClickListener(new View.OnClickListener() { //为进入功能面板的按钮添加监听器@Overridepublic void onClick(View v) {Intent intent = new Intent(RegActivity.this,FunctionTabActivity.class); //创建Intentintent.putExtra("uno", uno); //设置Extra字段startActivity(intent); //启动FunctionTabfinish(); //关闭该Activity}});}//方法:连接服务器,进行注册public void register(){new Thread(){public void run(){Looper.prepare();//获得用户输入的数据并进行验证EditText etName = (EditText)findViewById(R.id.etName); //获得昵称EditText对象EditText etPwd1 = (EditText)findViewById(R.id.etPwd1); //获得密码EditText对象EditText etPwd2 = (EditText)findViewById(R.id.etPwd2); //获得确认密码EditText 对象EditText etEmail = (EditText)findViewById(R.id.etEmail); //获得邮箱EditText对象EditText etStatus = (EditText)findViewById(R.id.etStatus); //获得心情EditText对象String name = etName.getEditableText().toString().trim(); //获得昵称String pwd1 = etPwd1.getEditableText().toString().trim(); //获得密码String pwd2 = etPwd2.getEditableText().toString().trim(); //获得确认密码String email = etEmail.getEditableText().toString().trim(); //获得邮箱String status = etStatus.getEditableText().toString().trim(); //获得状态if(name.equals("") || pwd1.equals("") || pwd2.equals("") || email.equals("") || status.equals("")){ Toast.makeText(RegActivity.this, "请将注册信息填写完整", Toast.LENGTH_LONG).show();return;}if(!pwd1.equals(pwd2)){ //判断两次输入的密码是否一致Toast.makeText(RegActivity.this, "两次输入的密码不一致!", Toast.LENGTH_LONG).show();return;}try{mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);String regInfo = "<#REGISTER#>"+name+"|"+pwd1+"|"+email+"|"+status;mc.dout.writeUTF(regInfo);String result = mc.din.readUTF();pd.dismiss();if(result.startsWith("<#REG_SUCCESS#>")){ //返回信息为注册成功result= result.substring(15); //去掉信息头uno = result; //记录用户的IDmyHandler.sendEmptyMessage(0); //发出Handler消息Toast.makeText(RegActivity.this, "注册成功!", Toast.LENGTH_LONG).show();}else{ //注册失败Toast.makeText(RegActivity.this, "注册失败!请重试!", Toast.LENGTH_LONG).show();}}catch(Exception e){e.printStackTrace();}}}.start();}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();}super.onDestroy();}}(5)AlbumActivity.javapackage wyf.wpf;import static wyf.wpf.ConstantUtil.IMAGESWITCHER_HEIGHT;import static wyf.wpf.ConstantUtil.PHOTO_HEIGHT;import static wyf.wpf.ConstantUtil.PHOTO_WIDTH;import static wyf.wpf.ConstantUtil.SERVER_ADDRESS;import static wyf.wpf.ConstantUtil.SERVER_PORT;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Color;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.opengl.Visibility;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.view.View;import android.view.ViewGroup;import android.view.animation.AnimationUtils;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.Gallery;import android.widget.ImageSwitcher;import android.widget.ImageView;import android.widget.Spinner;import android.widget.TextView;import android.widget.Toast;import android.widget.ViewSwitcher;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemSelectedListener;public class AlbumActivity extends Activity implements ViewSwitcher.ViewFactory{ List<String []> photoInfoList = new ArrayList<String []>();Bitmap [] photoList; //存放图片的数组Gallery gl = null; //Gallery对象的引用ImageSwitcher is = null; //ImageSwitcher对象的引用Spinner sp = null; //Spinner对象的引用MyConnector mc = null; //MyConnector对象的引用String xid = ""; //存放相册的IDString uno = ""; //存放用户IDString visitor = ""; //存放访问者的IDString pid = ""; //存放当前显示的照片IDint from = -1; //启动该Activity的来源,0为MyAlbumListActivity,1为AlbumListActivityList<String []> albumInfoList = new ArrayList<String []>(); //存放相册信息,id和相册名称//Spinner的AdapterBaseAdapter baSpinner = new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {TextView tv = new TextView(AlbumActivity.this);tv.setTextSize(18.5f);tv.setTextColor(Color.DKGRAY);String [] sa = albumInfoList.get(position);tv.setText(sa[1]);return tv;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic int getCount() {return albumInfoList.size();}};//Gallery的AdapterBaseAdapter baGallery= new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ImageView iv = new ImageView(AlbumActivity.this);iv.setAdjustViewBounds(true);iv.setLayoutParams(new youtParams(PHOTO_WIDTH, PHOTO_HEIGHT));iv.setMaxHeight(PHOTO_HEIGHT); //设置ImageView显示的高度iv.setMaxWidth(PHOTO_WIDTH); //设置ImageView显示的宽度iv.setImageBitmap(photoList[position]); //设置ImageView显示的内容return iv;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic int getCount() {if(photoList != null){return photoList.length;}else{return 0;}}};//点下Gallery中的图片后触发的事件监听器OnItemClickListener myListener = new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View v, int position,long id) {if(is != null){ //如果ImageSwitcher不为空Drawable d = new BitmapDrawable(photoList[position]);is.setImageDrawable(d);}}};Handler myHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch(msg.what){case 0:gl.setAdapter(baGallery);is.setImageDrawable(new BitmapDrawable(photoList[0]));break;}super.handleMessage(msg);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.album); //设置当前屏幕Intent intent = getIntent(); //获取启动该Activity的Intentuno = intent.getStringExtra("uno"); //获得Extra字段的unovisitor = intent.getStringExtra("visitor");from = intent.getIntExtra("from", -1); //获得Extra字段的fromint position = intent.getIntExtra("position", 0); //获得被选中的相册String [] albumInfoArray = intent.getStringArrayExtra("albumlist"); //获得相册信息数组xid = intent.getStringExtra("xid"); //获得被选中的相册编号albumInfoList = new ArrayList<String []>();for(String s:albumInfoArray){ //遍历信息数组String [] sa = s.split("\\|");albumInfoList.add(sa); //构建相册信息列表}sp = (Spinner)findViewById(R.id.spAlbum); //获得Spinner对象sp.setAdapter(baSpinner); //设置Spinner对象的Adaptersp.setSelection(position); //选中在前一个Activity中被选中的相册sp.setOnItemSelectedListener(new OnItemSelectedListener() { //为Spinner添加监听器@Overridepublic void onItemSelected(AdapterView<?> parent, View v,int position, long id) {xid = albumInfoList.get(position)[0]; //修改存储相册ID的成员变量getPhotoList(); //获得相册中的相片列表}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}});gl = (Gallery)findViewById(R.id.galleryPhoto); //获得Gallery对象gl.setOnItemClickListener(myListener); //设置Gallery的OnItemClickListener监听器is = (ImageSwitcher)findViewById(R.id.isPhoto); //获得ImageSwitcher对象is.setFactory(this); //设置ImageSwitcher的Factoryis.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); //设置ImageSwitcher 的In动画is.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));//设置ImageSwitcher 的Out动画Button btnBack = (Button)findViewById(R.id.btnAlbumBack); //获得返回按钮btnBackbtnBack.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {switch(from){ //判断启动该Activity的来源case 0: //有MyAlbumListActivity启动Intent intent1 = new Intent(AlbumActivity.this,FunctionTabActivity.class);intent1.putExtra("uno", uno);intent1.putExtra("tab", "tab5");startActivity(intent1);finish();break;case 1: //由AlbumListActivity启动Intent intent2 = new Intent(AlbumActivity.this,HomePageActivity.class);intent2.putExtra("uno", uno);intent2.putExtra("visitor", visitor);intent2.putExtra("tab", "tab2");startActivity(intent2);finish();break;}}});Button btnDeletePhoto = (Button)findViewById(R.id.btnDeletePhoto);if(visitor != null){ //不是查看自己的相册btnDeletePhoto.setVisibility(View.GONE); //如果不是自己的相册,隐藏删除按钮}btnDeletePhoto.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new AlertDialog.Builder(AlbumActivity.this).setTitle("提示").setIcon(R.drawable.alert_icon).setMessage("确认删除该照片?").setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {int pos = gl.getSelectedItemPosition();pid = photoInfoList.get(pos)[0];deletePhoto();}}).setNegativeButton("取消",null).show();}});}public void getPhotoList(){new Thread(){public void run(){Looper.prepare();mc = null;mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);mc.dout.writeUTF("<#GET_ALBUM#>"+xid);int size = 0; //获得相册长度size = mc.din.readInt(); //读取相册的长度if(size == 0){Toast.makeText(AlbumActivity.this, "该相册还未上传照片", Toast.LENGTH_LONG).show();Looper.loop();return;}photoInfoList = new ArrayList<String []>(size);photoList = new Bitmap[size];for(int i=0;i<size;i++){ //循环获取图片数据String photoInfo = mc.din.readUTF(); //读取相片信息String [] sa = photoInfo.split("\\|"); //切割字符串photoInfoList.add(sa); //将相片信息添加到列表中int photoLength = mc.din.readInt(); //读取相片长度byte [] buf = new byte[photoLength]; //创建相应长度的数组mc.din.read(buf); //读入图片数据photoList[i] = BitmapFactory.decodeByteArray(buf, 0, photoLength); //创建Bitmap }myHandler.sendEmptyMessage(0);}catch(Exception e){e.printStackTrace();}}}.start();}//方法:删除指定照片public void deletePhoto(){new Thread(){public void run(){Looper.prepare();if(mc ==null){mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);}String msg = "<#DELETE_PHOTO#>"+pid;mc.dout.writeUTF(msg);String reply = mc.din.readUTF();if(reply.equals("<#DELETE_PHOTO_SUCCESS#>")){Toast.makeText(AlbumActivity.this, "照片删除成功!", Toast.LENGTH_LONG).show();}else {Toast.makeText(AlbumActivity.this, "删除失败,请重试!", Toast.LENGTH_LONG).show();}getPhotoList();Looper.loop();}catch(Exception e){e.printStackTrace();}}}.start();}@Overridepublic View makeView() {ImageView iv = new ImageView(this);iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE);iv.setLayoutParams(newyoutParams(IMAGESWITCHER_HEIGHT,IMAGESWITCHER_HEIGHT));return iv;}@Overrideprotected void onDestroy() {if(mc != null){mc.sayBye();。
Android课程设计报告

android课程设计报告安卓课程设计报告安卓课程设计班级09级计算机二班学号20097923姓名郭丹目录第1章安卓应用程序开发背景 (3)1.1开发背景........................................................... (3)1.2开发环境........................................................... (4)第2章第3章3.13.23.3第4章安卓应用程序开发理论与方法.............................................. 4 “计算器”应用程序的设计与实现....................................... 6 拟解决的问题及目标........................................................... .. 6 总体设计........................................................... ..................... 7 详细设计与编码实现........................................................... .. 7 总结........................................................... . (17)第1章安卓应用程序开发背景1.1开发背景1.智能手机的市场(1)功能多样化的智能手机挑战全球PC出货量移动互联网时代的来临,直接促进了搭载智能操作系统、具有强大扩展性的智能手机、平板电脑等移动终端产业的蓬勃发展。
来自美国最大的风险投资机构KPCB的数据显示,全球智能手机出货量正在以远高于台式电脑、笔记本电脑出货量的速度快速增长,该机构预计2011年全球智能手机出货量将达到4.13亿,超过台式电脑与笔记本电脑出货量的总和。
安卓实验报告

安卓实验报告Android是目前全球最为流行的操作系统之一,其强大的应用程序生态系统和广泛的设备兼容性使得安卓成为开发者和用户的首选。
本文将介绍我在安卓实验中进行的一系列任务和实验结果。
实验一:安装开发环境在进行安卓开发之前,我们首先需要安装必要的开发环境。
我使用的是Android Studio,这是谷歌官方提供的开发工具,具有强大的功能和友好的用户界面。
通过安装Android Studio,我成功搭建了安卓开发环境,并进行了一些基本的配置。
实验二:创建第一个安卓应用程序根据老师的指导,我按照步骤成功创建了我的第一个安卓应用程序。
我选择了一个简单的计算器应用程序作为开始,它可以实现基本的加法和减法功能。
通过这个实验,我学会了使用Android Studio的界面设计工具和编写基本的Java代码。
实验三:UI设计和布局在这个实验中,我学习了安卓应用程序的用户界面设计和布局。
我使用了安卓提供的各种布局方式,如线性布局、相对布局和帧布局等,来设计和展示应用程序的不同界面。
通过这个实验,我对安卓界面设计的原则和技巧有了更深入的理解。
实验四:应用程序调试与测试在开发过程中,调试和测试是非常重要的环节。
通过Android Studio提供的调试工具,我能够针对应用程序中的问题进行定位和修复。
我还学会了使用模拟器和真机进行应用程序的测试,以确保应用程序的功能和稳定性。
实验五:数据库操作在这个实验中,我学习了如何在安卓应用程序中使用数据库。
我使用了SQLite数据库来存储和管理应用程序的数据。
通过编写SQL语句,我能够进行数据的插入、查询、更新和删除等操作。
这为我今后的应用程序开发提供了非常有用的技能。
总结:。
Android实验报告—UI设计(定稿)

Android实验报告—UI设计(定稿)第一篇:Android实验报告—UI设计(定稿)Android UI设计实验目的:本实验的目的是使学生深入了解Android程序框架结构、了解和掌握Android界面设计和界面编程。
通过程序设计,掌握常用界面控件、菜单、以及界面事件的响应。
实验要求:设计程序实现一个电子菜单,应具有显示菜单功能和选菜功能。
通过选择,将选中的菜单选项在界面做显示,如下图:[实现提示]1、建立Android工程,其中工程名称:MenuSelect579 应用名称:MenuSelect579 包名称:.bistu.dj1001.MenuSelect579 Activity名称:MenuSelect5792、工程建立完毕后,进行相应界面设计,再编写Java文件程序源码package .bistu.dj1001.MenuSelect579;import android.app.Activity;import android.os.Bundle;import android.view.ContextMenu;importandroid.view.ContextMenu.ContextMenuInfo;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.TextView;public class MenuSelect579 extends Activity {/** Called when the activity is first created.*/TextView LabelView = null;public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(yout.main);LabelView=(TextView)findViewById(bel);registerForContextMenu(La belView);}final static int CONTEXT_MENU_1 = Menu.FIRST;final static int CONTEXT_MENU_2 = Menu.FIRST+1;final static int CONTEXT_MENU_3 = Menu.FIRST+2;@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo){menu.setHeaderTitle(“今日菜单”);menu.add(0, CONTEXT_MENU_1, 0,“宫保鸡丁”);menu.add(0, CONTEXT_MENU_2, 1,“干煸豆角”);menu.add(0, CONTEXT_MENU_3, 2,“鱼香肉丝”);}@Override}public boolean onContextItemSelected(MenuItem item){} switch(item.getItemId()){case CONTEXT_MENU_1: LabelView.setText(“宫保鸡丁”);return true;case CONTEXT_MENU_2: LabelView.setText(“干煸豆角”);return true;case CONTEXT_MENU_3: LabelView.setText(“鱼香肉丝”);return true;} return false;程序运行结果:实验心得体会:(可选)通过本次实验熟悉了android的界面设计简单方法和界面编程,锻炼了实际动手能力,熟悉了Android程序框架结构、Android界面设通过程序设计,掌握了常用界面控件、菜单、以及界面事件的响应。
《Android应用程序设计》实验报告 (2)

实验1 搭建开发环境与第1个Android程序【实验目的】1.熟悉Android开发环境的搭建2.掌握用Eclipse开发Android程序的流程【实验内容】一、搭建Android开发环境按照下面的步骤,完成Android环境的搭建。
1.1 JDK的安装及配置1.根据电脑的系统位数安装软件包里的JDK,安装目录设置为d:\jdk1.x。
(d为你的安装盘,可以设为任意盘;x为你安装的jdk版本)2. WIN7系统环境变量设置(1)环境变量设置一(2)环境变量设置二(3)环境变量设置三(4)环境变量设置四1)创建新的环境变量。
名:JA V A_HOME,值:x:\jdk1.72)修改系统变量Path,在path变量值前添加这段:%JA V A_HOME%\bin;3)修改系统变量classpath,值为:.;%JA V A_HOME%\lib\dt.jar;%JA V A_HOME%\lib\tools.jar;(5)环境变量设置五1)测试开发环境。
在开始->搜索程序和文件里输入cmd.exe,打开cmd。
输入cd c:\ 命令进入c盘根目录。
2)在c盘根目录下使用记事本编写源文件,并存为java文件。
public class MyApp {public static void main (String[] args) {System.out.println(“我能学好Java语言!”);} }3)使用javac命令编译程序,在cmd命令行输入:javac MyApp.java生成class类型文件。
4)使用java命令运行程序,在cmd命令行输入:java MyApp如果在命令行显示结果“我能学好Java语言!”,则JDK环境配置成功。
1.2 Android SDK的安装及配置1. 解压adt-bundle-windows-x86_64-20131030.zip文件,里面的SDK是免安装版。
android课程设计报告_2

目录1. 概述 (1)2. 项目设计与实现 (1)2.1欢迎界面 (1)2.1.1界面布局 (2)2.1.2功能实现 (2)2.2登陆界面 (2)2.2.1 界面布局 (2)2.2.2 功能实现 (2)2.3微信显示界面 (4)2.3.1 界面布局 (4)2.3.2功能实现 (5)2.4主界面 (5)2.4.1 界面布局 (5)2.4.2 功能实现 (5)3.参考文献 (5)4.致谢 (6)1.概述移动互联网时代的来临, 直接促进了搭载智能操作系统、具有强大扩展性的智能手机、平板电脑等移动终端产业的蓬勃发展。
搭载安卓操作系统的智能手机目前已经成为市场上最炙手可热的智能产品。
开放的源代码和零成本已经让安卓在全世界范围内受到青睐并迅速获得了主要手机厂商和数百万软件开发者的支持, 2011年安卓系统的市场份额已经超过Symbian, 成为全球第一大智能手机操作系统。
本项目基于QQ和微信等聊天工具, 仿制其功能初步实现了登录界面和主界面的简单设置, 剩余的功能我会在以后更加努力实现。
2. 项目设计与实现2.1欢迎界面图1 欢迎界面2.1.1界面布局整体采用相对布局, 下面为一个线性布局, 其中包括一个ImageViewTextView,最下面仍是一个线性布局, 包括两个Button和两个TextView。
2.1.2功能实现欢迎界面由按钮和图片等构成, 启动该客户端时, 首先进入该界面。
在欢迎界面点击登录按钮可通过QQ号或微信号登录, 点击注册按钮, 可在联网的情况下注册微信号。
2.2登陆界面图2 登录界面2.2.1 界面布局整体采用RelativeLayout相对布局, 下面仍为一相对布局, 其中包括一个Buttton 和一个TextView.紧邻为两个EditText,最下面为相对布局, 包括两个Button。
2.2.2 功能实现使用UserEdit.getText().toString().trim() 和PasswordEdit.getText(). toString().trim()方法得到用户输入的用户名和密码。
安卓课程设计报告

安卓课程设计报告引言在当今数字化的时代,移动应用的发展变得越来越重要。
安卓操作系统作为最受欢迎的移动操作系统之一,为开发人员提供了广阔的创作空间。
本报告将详细介绍我们小组在安卓课程设计中的设计思路、开发过程和项目成果。
一、项目背景移动应用的普及使得人们在手机上执行各种任务变得越来越方便。
鉴于此,我们小组决定开发一款名为“Daily Planner”的日程管理应用。
该应用旨在帮助用户更加高效地管理个人和工作日程,提高生活的规划和安排能力。
二、需求分析1. 功能需求- 日程管理:用户可以创建、编辑和删除日程,并设置提醒。
- 分类管理:用户可以按照分类将日程划分,如工作、学习、娱乐等。
- 日程分享:用户可以将日程分享给其他用户,方便共享安排。
- 备忘录功能:用户可以添加备忘录,例如购物清单、想法记录等。
- 数据备份:用户可以将日程数据进行备份和恢复。
2. 非功能需求- 用户友好性:用户界面设计简洁明了,操作简单直观。
- 性能要求:应用响应速度快,稳定性高。
- 安全性:用户数据加密存储,保障用户隐私。
三、系统设计和开发我们小组采用了敏捷开发方法,将整个项目分为多个迭代阶段。
每个迭代阶段都有相应的目标和任务,以确保项目在时间和质量上的有效管理。
1. 技术选型为了实现项目需求,我们选择了Java作为主要的开发语言,使用Android Studio作为集成开发环境。
此外,我们还使用了SQLite 作为本地数据库存储数据。
2. 界面设计我们注重用户体验,将界面设计简洁明了。
主界面呈现日历视图,用户可以直观地查看每日计划。
通过侧边菜单,用户可以快速切换到不同的功能模块,如日程管理、备忘录等。
3. 后台开发为了实现日程管理、分类管理等功能,我们设计了相应的后台逻辑。
我们使用SQLite作为本地数据库存储用户数据,并通过查询和更新操作实现不同的功能需求。
四、系统测试与优化在开发过程中,我们注重系统的稳定性和性能。
我们采用了自动化测试框架对系统进行测试,以确保功能的正确性。
安卓课程设计报告

《Android平台软件开发》课程设计报告题目基于安卓的计算标准体重的应用程序专业计算机科学与技术学生姓名学号二O一六年六月五日目录1背景介绍.................................................. 错误!未定义书签。
2需求分析 (1)3设计目的 (2)4技术介绍 (2)4.1 Android Studio--开发软件 (2)4.2 java+Android类库+xml (2)4.2.1 java (2)4.2.2 xml (2)5 设计思路 (2)5.1功能分析 (2)5.2模块划分 (2)5.3程序流程图 (3)6 程序实现及代码分析 (3)6.1用户登录界面 (3)6.2输入和提交信息程序界面 (8)6.3显示计算结果程序界面 (10)7 总结 (12)参考文献 (13)基于安卓的计算标准体重的应用程序周超南京信息工程大学滨江学院计算机系,江苏南京 210044摘要:本报告主要阐述的是根据身高计算标准体重的应用程序。
本应用程序是以安卓技术、Java开发语和android studio开发平台为背景来进行设计的。
本应用程序包含了用户登录功能、背景音乐播放功能和计算标准体重功能。
关键词:Java;android studio;安卓;1 背景介绍随着移动通信与Internet向移动终端的普及,网络和用户对移动终端的要求越来越高,而Symbian,Windows?Mobile,PalmOS等手机平台过于封闭,不能很好的满足用户的需求,因此市场迫切需要一个开发性很强的平台。
经过多年的发展,第三代数字通信(3G)技术活动了广泛的接受,它为移动终端用户带来了更快的数据传输速率。
随着3G网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。
因此,移动终端的应用软件和需要的服务将会有很大的发展空间。
Google为此于2007年11月推出了一个专为移动设备设计的软件平台——Android。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计报告的内容可以包括:开发背景、需求分析、系统设计、系统实现、总结与展望等1.下面示例需求分析、系统设计、系统实现的写法:2.目录要求,三级目录如图1所示图1目录要求第3章系统功能需求分析3.1系统目标语音记账系统的设计主要以方便用户实时实地快速记账为目的,以语音识别为主要录入方式。
语音记账平台简化了人们的记帐操作,改变了传统的手动记账方式,并能够向用户以不同的形式,直观地展现历史消费。
与此同时,该系统还提供还款提醒、消费预警等功能,具有良好的用户体验。
(1)用户注册:可以注册用户类型的账号。
(2)找回密码:用户可以找回所忘记的密码。
(3)语音识别:将用户所说的话语转换为文本显示在界面中。
(4)记账功能:实现记账的功能,存入数据库中。
(5)查询账本:提供消费记录的查询功能。
(6)修改账本:对消费记录进行修改。
(7)还款提醒:提醒用户进行还款。
(8)消费预警:对欲超支用户进行提醒。
经问卷调查显示,语音记账的适合群体主要有:个人隐私账本,网上卖家,不懂财务知识,个人记账,个体工商户,家庭理财,中小企业等用户。
该系统因为提供了方便快捷的记账方式以及一目了然的收入支出明细,所以拥有庞大的群体市场。
依据庞大的群体市场,语音记账系统的首要任务是从该系统的总体目标出发,根据用户对系统的逻辑功能的要求,并在考虑经济,技术和运行环境等方面的条件下,确定系统各组织部分和总体结构的技术方案,合理选择软硬件设备,提出系统的实施计划,从而确保总体目标的实现[6]。
下文从用户的角色分析用户对系统的逻辑功能的要求,从而为系统功能的实现提供依据;从系统总体的结构设计划分模块,并依次对每个模块进行必要的解读说明。
3.2语音记账用户角色分析UML是一种可视化的建模语言,它的优点是定义良好,功能强大,易于表达并且普遍适用,它不仅支持从需求分析开始建模的软件开发全过程,还支持面向对象的分析与设计[4]。
UML建模的关键部分是UML用例图建模,主要功能是用以表达系统行为和功能需求。
UML用例图建模可以分为两个部分:用例图与用例的描述,用例的描述是用来负责依次详细地描述用例图中的每个用例,并用文本文档来实现[12]。
用例图是由用例,参与者,箭头以及系统边界组成,并用画图方法进行设计[4]。
本文基于对系统功能与数据的需求分析,最终确定了软件所期望的用户对象,即用例中的执行者。
并且,本文获取了每个用户的需求,从执行者的角度出发,分析出了它与系统需要进行的交互活动,并从这些交互过程中抽象出来,形成了管理员的用例图[5],如图3-1所示。
图3-1 系统用例图如上图所示,系统总体设计以执行者为中心,主要作用是一个实现语音识别,随时记录自己的消费情况,已形成良好的消费习惯的角色。
对于没有系统账号的用户,可以先注册新账号;对于忘记账号密码的用户,提供找回密码的功能。
若用户想进行记账操作,系统提供手动记账与语音记账两种方式,方便快捷。
从该系统用例图可以得出,用户对系统的逻辑功能的要求主要划分为七大功能:用户注册,找回密码,语音识别,记账功能,查询账本,修改账本,还款提醒以及消费预警功能。
3.3 总体结构设计3.3.1系统总功能模块分析通过对以上系统用例图所涉及的功能进行分析,分析出语音记账系统的功能模块,如图3-2所示。
在本系统中,共划分了四大模块,分别为系统维护模块,账目管理模块,语音处理模块,数据查询模块。
图3-2 功能模块图在本系统中,账目管理模块,语音处理模块,数据查询模块是非常重要的。
账目管理模块支持用户进行账目分类,账目修改以及账目删除的操作。
语音处理模块的主要功能是识别用户语音输入,并支持语义理解。
数据查询模块支持用户查询数据库中的账目数据,并以多种图形化的方式展现账目数据。
系统维护模块的主要职责是维护系统中的数据,并支持用户修改密码。
3.3.2系统子功能模块分析1. 系统维护模块系统维护模块主要用于维护系统中的数据,从而保证数据的完整性和准确性。
由图3-3所示的功能模块可知,系统维护模块共划分为五大核心模块,依次分别为用户管理模块,数据字典维护模块,修改密码模块,系统日志模块以及退出系统模块。
图3-3 系统维护模块图在本模块中,数据字典维护是比较关键的模块,也就是该模块的难点。
它的主要作用是保证软件的数据字典准确,完备,并方便用户查询,为维护工作的进行提供了必要的支撑。
修改密码是指用户可以重设密码,当修改密码成功后,系统自动跳转进入登录界面。
2. 账目管理模块下略……3.4 本章小结本章首先提出了系统设计的目标,为系统实现章节中功能的设计提供依据。
然后,本章从用户角色分析出用户对系统逻辑功能的要求,并采用UML用例图进行显示。
接着,本章从总体结构设计出发,将系统划分为五大模块:系统维护模块,数据录入模块,数据查询模块,数据修改模块以及数据删除模块。
最后,本章依次对每个模块进行分析和概述。
第5章系统实现5.1 系统实现本系统关键技术的实现主要对语音识别、语义分析、底部菜单栏、自定义控件、图形化显示、Web Service、以及本地数据库等功能模块进行研究。
5.1.1 SpeechToText类在本系统中,使用SpeechToText类实现将语音转换成文本的简单应用,实际运行效果如图5-1所示。
当用户点击语音按钮时,首先判断网络端口连接状态,然后进行录音,并将用户的语音信号返回百度云端,从而得到最佳的识别效果。
图5-1 语音转换为文本界面图为了实现将语音转换成文本,第一步创建BaiduASRDigitalDialg对话框对象,设置对话框对象中的相关参数。
第二步,设置回调,处理语音识别结果,并在主线程中调用。
第三步,调用Show()方法弹出对话框,进行语音识别。
配置ASREngine 语音识别引擎的参数,创建V oiceRecognitionConfig对象,并获取对应的参数,得到音量反馈数据。
第四步,设置音频采样率,并与外部音频保持一致。
在本系统中,WiFi 环境下采样率为16kHZ,移动网络环境下采样率为8kHZ。
第五步,开始识别后,系统便启动录音,预处理,上传到服务器并获取识别结果的操作。
SpeechToText的类图如下图5-2所示。
图5-2 SpeechToText的类图(1)SpeechToText类的属性DIALOG_THEME:静态的整型变量,用以存放弹出的语音对话框的样式属性。
CURRENT_LANGUAGE:字符串String类型的变量,用于记录用户选择的语言。
CURRENT_LANGUAGE_INDEX:用以存放用户选择的语言对应的索引。
API_KEY:字符串常量,记录连接百度API的密钥。
mDialog:BaiduASRDigitalDialog类型的变量,用以存放弹出的对话框对象。
context:Context类型的,记录所在界面的上下文对象。
mRecognitionListener:对用户的语音输入进行响应的监听器。
(2)SpeechToText类的方法在SpeechToText类中,setmRecognitionListener是比较关键的方法,也就是该类的核心,主要分析如下:方法setmRecognitionListener:对响应语音对话框的监听器进行设置。
方法btnSpeak_OnClick:语音按钮的点击事件,实现将语音转换成文本。
方法getCurrentLanguag:获取到本系统中设置的语种类型。
方法getCurrentLanguageIndex:获取到系统中设置的语种类型对应的索引值。
方法getDialog:获取到语音对话框BaiduASRDigitalDialog对象。
对于该类中的其他方法的解析,这里省略。
语音对话框的具体参数说明如下表5-1所示。
表5-1 识别对话框的具体参数说明(3)主要代码解析创建BaiduASRDigitalDialg对话框对象时:Bundle parm=newBundle();parm.putString(BaiduASRDgtalDialog.PARMAPI_KEY, API_KEY);parm.putString(BaiduASRDgtalDialog.PARMSECRET_KEY, SECRET _KEY);parm.putString( BaiduASRDgtalDialog.PARMLANGUAGE,NGUAG E);pam.putInt(BaiduASRDgtalDalog.PARMDIALOG_THEME,BaiduASRDgtalDialog.THEME_ DEEPBG)mDialog = new BaiduASRDgtalDialog(context, pam);设置回调时,获取识别结果并进行相应的业务逻辑ArrayList<String>s=result!=null?result.getStringArrayList(RESULTS_RECOGNITION):null;播放提示音时VoiceRecogntionConfig confg=new VoiceRecognitionConfig();confg.enableBeginSundEffect(R.raw.recognition_start_ bdspeech);confg.enableEndSundEffect(R.raw. speech_end_ bdspeech);监听语音能量mRecogntionClient.getCurrentLevelMeter();语音识别,API方式的实现VoiceRecogntionConfig confg = new VoiceRecogntonConfig();confg.setProp(Config.CURENT_PROP);confg.setLanguage(Config.getCurentLnguage());confg.enableVicePower(Config.SHOW_VOL);config.setSamplRate(VoiceRecognitonConfig.SAMPLE_RATE_8K);int code = mASREngne.startVoiceRecogntion(mListener, config);if (code != VoiceRecogntionClient.START__RESULTWORK_WORKING) {mResult.setText(getString(R.string.error));}创建BaiduASRDigitalDialg语音对话框对象时,主要步骤为:第一步,使用Bundle在Activity之间交换数据。
调用Bundle的putString()方法,putInt()方法,分别用于传递字符串类型的变量以及整型的变量。