论文总字数:29253字
目 录
第三步,打开project Structure... 观察类库目录,在弹出一个对话中,我们选择右上角的”Dependcies“就可以看到下面我们添加的第三方类库了[18]。同时记得在app的配置文件中对类库进行加载:
图5-4 项目导入
最后在二维码扫描模块对二维码扫描功能进行实现:
public void onClick(View v) {
// 调用ZXIng开源项目源码 扫描二维码
Intent openCameraIntent=new Intent(GenerateCode.this,CaptureActivity.class);
startActivityForResult(openCameraIntent,0);
}
直接调用zxing准备好的activty以及二维码扫描算法来实现从二维码中获取视频地址。同时通过重写onActivityResult方法来进行跳转,并且传递视频的地址,代码如下:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode== RESULT_OK){
Bundle bundle= data.getExtras();
String scanResult=bundle.getString("result");
Intent intentPath=new Intent();
intentPath.setClass(GenerateCode.this,MainActivity.class);
Bundle bundlePath=new Bundle();
bundlePath.putString("path",scanResult);
intentPath.putExtras(bundlePath);
GenerateCode.this.startActivity(intentPath);
}
}
5.2.5 异步加载获取视频封面
异步加载,就是在不影响主线程运行的情况下,进行信息下载和录入等操作,在开发应用时,我们常常需要从远程网络中载入一些图像甚至视频文件,但是主线程,尤其是界面显示是不可能等待这些数据完全下载完成再显示的。移动设备通常有有限等待机制,当一个应用程序长时间不进行下一步操作,就默认这个应用程序进入无法运行的死循环中。而异步加载就是为了解决这一问题而存在的。而且在高版本的sdk中规定,主线程不能执行网络连接的操作,而一些布局空间的处理又无法在普通的子线程中使用,除了handler之外,就没有办法处理了。而异步加载就是建立在handler至少进行进一步的完善。
此处使用异步加载来加载封面图,由于加载的时间较长,程序不可能因为图片而等待不显示主界面,所以使用异步加载的方式,让界面的显示与加载图片的过程分离。
class DownLoadTask extends AsyncTasklt;Void,Integer,Booleangt; {
Bitmap fm;
//获取网络视频第一帧
createVideoThumbnail(String url, int width, int height) ;
//检测SD卡中是否存在图片,如果没有则调用createVideoThumbnail
loadImageFromUrl(String url, String author) throws IOException {
//是否SD卡可用
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//查看是否有本地图片资源
String FileUrl = Environment.getExternalStorageDirectory() "/fm_pic/";
File folder = new File(FileUrl);
if(!folder.exists()){
folder.mkdir();
}
File f = new File(FileUrl author ".jpg");
//SD卡中是否有该文件,有则直接读取返回
if(f.exists()){
// FileInputStream fis = new FileInputStream(f);
// Drawable d = Drawable.createFromStream(fis, "src");
Bitmap bmap= BitmapFactory.decodeFile(FileUrl author ".jpg");
return bmap;
}
//没有的话则去连接下载,并写入到SD卡中
fm = createVideoThumbnail(url, 30, 30);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(f));
fm.compress(Bitmap.CompressFormat.JPEG, 100, bos);
// bos.flush();
bos.close();
// Drawable d = Drawable.createFromStream(i, "src");
return loadImageFromUrl(url,author);
}
//SD卡不可用则直接加载使用
else{
fm = createVideoThumbnail(url, 30, 30);
return fm;
}
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// image.setImageResource(R.mipmap.roll2);
}
@Override
protected Boolean doInBackground(Void... params) {
for (int i=0;ilt;infolist.size();i ){
try {
bitmap_pc= loadImageFromUrl("http://182.254.151.22:8080/" infolist.get(i).getAddress(),infolist.get(i).getVideoname());
infolist.get(i).setBitmap(bitmap_pc);
publishProgress();
}catch (Exception e){
Log.e("connERROR","获取失败");
return false;
}
publishProgress();
}
return true;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
adpter.notifyDataSetChanged();
}
5.2.6 更新ListView内容
ListView通常被用作放置数据量较大的元素,比如qq的聊天联系人列表、短信的来信列表等等。这些数据无法一下次放置在我们的眼前,必须加载一部分,隐藏一部分。在实际运用中,每添加一个项,都需要更新一次listview,如何使用好这一控件,就必须好好考虑了。
public void upDateAdapter() {
MainActivity activity = (MainActivity) getActivity();//获得MainActivity的实例
ArrayListlt;Stringgt; names=activity.getNameList();
if(names.size()gt;0){
// mTextView.setText(names.size() "");
for (int i=0;ilt;names.size();i ){
for(int j=0;jlt;historylist.size();j ){
if(names.get(i)==historylist.get(j).getVideoname()){
剩余内容已隐藏,请支付后下载全文,论文总字数:29253字
相关图片展示:
该课题毕业论文、开题报告、外文翻译、程序设计、图纸设计等资料可联系客服协助查找;