这里小结下,如何用android的模拟器去创建一个sdcard,并且学习如何在android中去下载

一个网上的文件,保存到android,并且下载时,会显示一个进度条


1 页面结构,提供一个button,点BUTTON时,去下载一个图片,main.xml设计如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button
android:text="Start long running task.."
android:id="@+id/startBtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
</LinearLayout>


2 主程序
package com.liao;

import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class AndroAsync extends Activity {
public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
private Button startBtn;
private ProgressDialog mProgressDialog;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startBtn = (Button)findViewById(R.id.startBtn);
startBtn.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
startDownload();
}
});
}

private void startDownload() {
String url = "http://image-

7.verycd.com/0d7596f5db7df1742236466dc91311b1435702(120x120)/thumb.jpg";
new DownloadFileAsync().execute(url);
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DOWNLOAD_PROGRESS:
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage("Downloading file..");
mProgressDialog.setProgressStyle

(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
return mProgressDialog;
default:
return null;
}
}
class DownloadFileAsync extends AsyncTask<String, String, String> {

@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(DIALOG_DOWNLOAD_PROGRESS);
}

@Override
protected String doInBackground(String... aurl) {
int count;

try {
URL url = new URL(aurl[0]);
URLConnection conexion = url.openConnection();
conexion.connect();

int lenghtOfFile = conexion.getContentLength();
Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);

InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream

("/sdcard/picture.jpg");

byte data[] = new byte[1024];

long total = 0;

while ((count = input.read(data)) != -1) {
total += count;
publishProgress(""+(int)((total*100)/lenghtOfFile));
output.write(data, 0, count);
}

output.flush();
output.close();
input.close();
} catch (Exception e) {

Log.e("error",e.getMessage().toString());
System.out.println(e.getMessage().toString());
}
return null;

}
protected void onProgressUpdate(String... progress) {
Log.d("ANDRO_ASYNC",progress[0]);
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}

@Override
protected void onPostExecute(String unused) {
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
}

}

注意这里,在startdownload 方法中,调用了DownloadFileAsync内部类,这个内部类充

分利用了AsyncTask的异步工作特性,是很方便的,其中注意doInBackground(这个阶段下

载图片),onProgressUpdate是让进度条完成后消失。

最后,要记得在androidmanifest.xml中的</application>后加入
<uses-permission android:name="android.permission.INTERNET" />
让能有访问互联网的能力

3 下面讲解下其中如何用到的,把图片保存到sdcard中去,由于是模拟器,因此
只能在磁盘上模拟一个IMG文件来充当模拟,步骤如下:
1) 打开cmd,进入Android SDK安装路径下的tools目录下,输入如下命令:

mksdcard 1024M sdcard.img

该命令会在当前目录下生成一个sdcard.img文件,该文件是Android模拟器的SD卡镜像文件

。1024M表示SD卡有1024M大小,即1G容量。目前Android支持8M~128G的SD卡。


2) 运行带sdcard的模拟器
A 在cmd中启动带有sdcard的模拟器

进入Android SDK安装路径下的tools目录中,运行下面命令:

emulator -avd name_avd -sdcard sdcard.img

其中,name_avd是已有的模拟器的名字,sdcard.img是第一步创建的SD卡镜像文件。

B 在eclipse中,新建模拟器的时候,指定SD卡镜像文件的路径,并且加入对SD卡的支持选项

打开eclipse,进入:window->android SDK and AVD manager,
然后在create avd的时候,在SD CARD中选择"FILE",然后再选择sd support;

3)如何看SDCARD中的文件
1)在cmd中,进入Android SDK的安装路径下的tools目录中,运行命令:

adb push E:\abc.jpg sdcard/abc.jpg

其中,E:\test.3gp 是本地要上传的文件,sdcard/abc.jpg 为上传到SD卡中的路径。

注意:adb push 电脑路径 模拟器路径

在电脑路径中,必须使用“\”,在模拟器路径中必须使用“/”,并且模拟器的根路径是只

读的。

2 ) 在eclipse环境中

在设置了RUN的命令参数后,RUN一个应用程序,然后使用DDMS的File Explorer工具导入导出文

件。打开DDMS工具,在eclipse的windows->Open Perspective->Other...里面打开DDMS工具,在

DDMS工具的File Explorer标签里面选择sdcard目录导入导出文件,

更多相关文章

  1. Android(安卓)的selector背景选择器应用
  2. Android之——自动挂断电话的实现
  3. Android编译系统分析大全
  4. Android(安卓)apk逆向实战
  5. [android ndk]android studio动态库生成及jni底层调用步骤
  6. NDK编程实例
  7. android gen文件不生成、R文件报错
  8. Java和Android(安卓)Http连接程序:使用java.net.URL 下载服务器图
  9. Android(安卓)4.0 Launcher2源码分析——主布局文件

随机推荐

  1. [日更-2019.4.22、23、24] cm-14.1 Andro
  2. Android下引用系统库的方法及问题
  3. 【Android】Android中两种常用布局(Linear
  4. 解决AndroidStudio连不上Android设备真机
  5. android中简单的Handler与Message
  6. Android(安卓)Drawable 那些不为人知的高
  7. Android(安卓)逆向apk程序的心得
  8. Android框架理解之USB
  9. Android(安卓)自定义上面圆角下面直角的I
  10. Android(安卓)渗透测试学习手册(三)Android