当前位置: 编程技术>移动开发
本页文章导读:
▪圆球旋转Anim(主要学习点Matrix知识) 球体旋转Anim(主要学习点Matrix知识)
这点Code主要对View重写进行球体旋转: 知识点: 1.重写View 2.将Drawable资源转化为Bitmap 直接上代码(便于以后查看使用): Java代码 class MyView extends View { .........
▪ EditText输入事件缴获与监听 EditText输入事件截获与监听
本节介绍一下EditText中进行文字截获和事件监听。 预期目标:如下图,输入框中每输入一个字符,下面的TextView可以迅速的显示出来输入框中的内容 1.第.........
▪ 远路下载安装apk文件到手机或模拟器 远程下载安装apk文件到手机或模拟器
废话少说,直接上代码,会加上详细注释: 测试地址:http://www.dubblogs.cc:8751/Android/Test/Apk/EX04_14.apk Java代码 package cn.com; import android.app.Activity; impo.........
[1]圆球旋转Anim(主要学习点Matrix知识)
来源: 互联网 发布时间: 2014-02-18
球体旋转Anim(主要学习点Matrix知识)
这点Code主要对View重写进行球体旋转:
知识点:
1.重写View
2.将Drawable资源转化为Bitmap
直接上代码(便于以后查看使用):
Java代码
class MyView extends View {
private Bitmap bitmap1;
private Bitmap bitmap2;
private int digree1 = 0;
private int digree2 = 360;
public MyView(Context context) {
super(context);
setBackgroundColor(Color.WHITE);
InputStream is = getResources().openRawResource(R.drawable.cross);
bitmap1 = BitmapFactory.decodeStream(is);
is = getResources().openRawResource(R.drawable.ball);
bitmap2 = BitmapFactory.decodeStream(is);
}
@Override
protected void onDraw(Canvas canvas) {
Matrix matrix = new Matrix();
if (digree1 > 360)
digree1 = 0;
if (digree2 < 0)
digree2 = 360;
matrix.setRotate(digree1++, 160, 240);
canvas.setMatrix(matrix);
canvas.drawBitmap(bitmap1, 88, 169, null);
matrix.setRotate(digree2--, 160, 240);
canvas.setMatrix(matrix);
canvas.drawBitmap(bitmap2, 35, 115, null);
invalidate();
}
}
这点Code主要对View重写进行球体旋转:
知识点:
1.重写View
2.将Drawable资源转化为Bitmap
直接上代码(便于以后查看使用):
Java代码
class MyView extends View {
private Bitmap bitmap1;
private Bitmap bitmap2;
private int digree1 = 0;
private int digree2 = 360;
public MyView(Context context) {
super(context);
setBackgroundColor(Color.WHITE);
InputStream is = getResources().openRawResource(R.drawable.cross);
bitmap1 = BitmapFactory.decodeStream(is);
is = getResources().openRawResource(R.drawable.ball);
bitmap2 = BitmapFactory.decodeStream(is);
}
@Override
protected void onDraw(Canvas canvas) {
Matrix matrix = new Matrix();
if (digree1 > 360)
digree1 = 0;
if (digree2 < 0)
digree2 = 360;
matrix.setRotate(digree1++, 160, 240);
canvas.setMatrix(matrix);
canvas.drawBitmap(bitmap1, 88, 169, null);
matrix.setRotate(digree2--, 160, 240);
canvas.setMatrix(matrix);
canvas.drawBitmap(bitmap2, 35, 115, null);
invalidate();
}
}
[2] EditText输入事件缴获与监听
来源: 互联网 发布时间: 2014-02-18
EditText输入事件截获与监听
本节介绍一下EditText中进行文字截获和事件监听。
预期目标:如下图,输入框中每输入一个字符,下面的TextView可以迅速的显示出来输入框中的内容
1.第一种实现方法:使用setOnKeyListener(),不过这种方式只能监听硬键盘事件
2.使用TextWatcher类,这种方式是可以监听软键盘和硬键盘的,我们只需要实现onTextChanged方法即可,另外TextWatcher还提供了beforeTextChanged和afterTextChanged方法,用于更加详细的输入监听处理
3、代码片段:实现当输入到最大值时则不允许再输入了,另外,由于EditText并没有提供给我们EditText的禁止输入功能,以下方法也实现了此功能。
本节介绍一下EditText中进行文字截获和事件监听。
预期目标:如下图,输入框中每输入一个字符,下面的TextView可以迅速的显示出来输入框中的内容
1.第一种实现方法:使用setOnKeyListener(),不过这种方式只能监听硬键盘事件
edittext.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { textview.setText(edittext.getText()); return false; } });
2.使用TextWatcher类,这种方式是可以监听软键盘和硬键盘的,我们只需要实现onTextChanged方法即可,另外TextWatcher还提供了beforeTextChanged和afterTextChanged方法,用于更加详细的输入监听处理
edittext.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { textview.setText(edittext.getText()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } });
3、代码片段:实现当输入到最大值时则不允许再输入了,另外,由于EditText并没有提供给我们EditText的禁止输入功能,以下方法也实现了此功能。
private void setEditable(EditText mEdit, int maxLength, boolean value) { if (value) { mEdit.setFilters(new InputFilter[] { new MyEditFilter(maxLength) }); mEdit.setCursorVisible(true); mEdit.setFocusableInTouchMode(true); mEdit.requestFocus(); } else { mEdit.setFilters(new InputFilter[] { new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { return source.length() < 1 ? dest.subSequence(dstart, dend) : ""; } } }); mEdit.setCursorVisible(false); mEdit.setFocusableInTouchMode(false); mEdit.clearFocus(); } }
[3] 远路下载安装apk文件到手机或模拟器
来源: 互联网 发布时间: 2014-02-18
远程下载安装apk文件到手机或模拟器
废话少说,直接上代码,会加上详细注释:
测试地址:http://www.dubblogs.cc:8751/Android/Test/Apk/EX04_14.apk
Java代码
package cn.com;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.URLUtil;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
/*必须引用java.io与java.net*/
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class InstallUrlApk extends Activity
{
private TextView mTextView01;
private EditText mEditText01;
//点击下载的按钮
private Button mButton01;
private static final String TAG = "DOWNLOADAPK";
private String currentFilePath = "";
private String currentTempFilePath = "";
private String strURL = "";
private String fileEx = "";
private String fileNa = "";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView01 = (TextView) findViewById(R.id.myTextView1);
mButton01 = (Button) findViewById(R.id.myButton1);
mEditText01 = (EditText) findViewById(R.id.myEditText1);
mButton01.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
/* 文件会下载至local端 */
mTextView01.setText("下载中...");
strURL = mEditText01.getText().toString();
/取得欲安装程序之文件名称(后缀名)
fileEx = strURL.substring(strURL.lastIndexOf(".") + 1, strURL.length())
.toLowerCase();
System.out.println("***************fileEx =" + fileEx);
fileNa = strURL.substring(strURL.lastIndexOf("/") + 1, strURL
.lastIndexOf("."));
System.out.println("***************fileNa =" + fileNa);
//开启一个子线程进行文件的下载
getFile(strURL);
}
});
mEditText01.setOnClickListener(new EditText.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
mEditText01.setText("");
mTextView01.setText("远程安装程序(请输入URL)");
}
});
}
/* 处理下载URL文件自定义函数 */
private void getFile(final String strPath)
{
try
{
if (strPath.equals(currentFilePath))
{
getDataSource(strPath);
}
currentFilePath = strPath;
Runnable r = new Runnable()
{
public void run()
{
try
{
// 开启一个线程进行远程文件下载
getDataSource(strPath);
} catch (Exception e)
{
Log.e(TAG, e.getMessage(), e);
}
}
};
new Thread(r).start();
} catch (Exception e)
{
e.printStackTrace();
}
}
/* 取得远程文件 */
private void getDataSource(String strPath) throws Exception
{
//如果是一个正确的网址,就返回true
if (!URLUtil.isNetworkUrl(/blog_article/strPath/index.html))
{
mTextView01.setText("错误的URL");
} else
{
/* 取得URL */
URL myURL = new URL(strPath);
/* 创建连接 */
URLConnection conn = myURL.openConnection();
conn.connect();
/* InputStream 下载文件 */
InputStream is = conn.getInputStream();
if (is == null)
{
throw new RuntimeException("stream is null");
}
// 创建临时文件
// 两个参数分别为前缀和后缀
File myTempFile = File.createTempFile(fileNa, "." + fileEx);
/* 取得站存盘案路径 */
currentTempFilePath = myTempFile.getAbsolutePath();
/* 将文件写入暂存盘 */
FileOutputStream fos = new FileOutputStream(myTempFile);
byte buf[] = new byte[128];
do
{
int numread = is.read(buf);
if (numread <= 0)
{
break;
}
fos.write(buf, 0, numread);
} while (true);
// 打开文件进行安装(下载完成后执行的操作)
openFile(myTempFile);
try
{
is.close();
} catch (Exception ex)
{
Log.e(TAG, "error: " + ex.getMessage(), ex);
}
}
}
// 在手机上打开文件的method
private void openFile(File f)
{
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
/* 调用getMIMEType()来取得MimeType */
String type = getMIMEType(f);
/* 设置intent的file与MimeType */
intent.setDataAndType(Uri.fromFile(f), type);
startActivity(intent);
}
/* 判断文件MimeType的method */
private String getMIMEType(File f)
{
String type = "";
String fName = f.getName();
/* 取得扩展名 */
String end = fName.substring(fName.lastIndexOf(".") + 1, fName.length())
.toLowerCase();
/* 依扩展名的类型决定MimeType */
if (end.equals("m4a") || end.equals("mp3") || end.equals("mid")
|| end.equals("xmf") || end.equals("ogg") || end.equals("wav"))
{
type = "audio";
} else if (end.equals("3gp") || end.equals("mp4"))
{
type = "video";
} else if (end.equals("jpg") || end.equals("gif") || end.equals("png")
|| end.equals("jpeg") || end.equals("bmp"))
{
type = "image";
} else if (end.equals("apk"))
{
/* android.permission.INSTALL_PACKAGES */
type = "application/vnd.android.package-archive";
} else
{
type = "*";
}
/* 如果无法直接打开,就跳出软件列表给用户选择 */
if (end.equals("apk"))
{
} else
{
type += "/*";
}
return type;
}
/* 自定义删除文件方法 */
private void delFile(String strFileName)
{
File myFile = new File(strFileName);
if (myFile.exists())
{
myFile.delete();
}
}
/* 当Activity处于onPause状态时,更改TextView文字状态 */
@Override
protected void onPause()
{
mTextView01 = (TextView) findViewById(R.id.myTextView1);
mTextView01.setText("下载成功");
super.onPause();
}
/* 当Activity处于onResume状态时,删除临时文件 */
@Override
protected void onResume()
{
// TODO Auto-generated method stub
/* 删除临时文件 */
delFile(currentTempFilePath);
super.onResume();
}
}
package cn.com;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.URLUtil;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
/*必须引用java.io与java.net*/
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class InstallUrlApk extends Activity
{
private TextView mTextView01;
private EditText mEditText01;
//点击下载的按钮
private Button mButton01;
private static final String TAG = "DOWNLOADAPK";
private String currentFilePath = "";
private String currentTempFilePath = "";
private String strURL = "";
private String fileEx = "";
private String fileNa = "";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView01 = (TextView) findViewById(R.id.myTextView1);
mButton01 = (Button) findViewById(R.id.myButton1);
mEditText01 = (EditText) findViewById(R.id.myEditText1);
mButton01.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
/* 文件会下载至local端 */
mTextView01.setText("下载中...");
strURL = mEditText01.getText().toString();
/取得欲安装程序之文件名称(后缀名)
fileEx = strURL.substring(strURL.lastIndexOf(".") + 1, strURL.length())
.toLowerCase();
System.out.println("***************fileEx =" + fileEx);
fileNa = strURL.substring(strURL.lastIndexOf("/") + 1, strURL
.lastIndexOf("."));
System.out.println("***************fileNa =" + fileNa);
//开启一个子线程进行文件的下载
getFile(strURL);
}
});
mEditText01.setOnClickListener(new EditText.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
mEditText01.setText("");
mTextView01.setText("远程安装程序(请输入URL)");
}
});
}
/* 处理下载URL文件自定义函数 */
private void getFile(final String strPath)
{
try
{
if (strPath.equals(currentFilePath))
{
getDataSource(strPath);
}
currentFilePath = strPath;
Runnable r = new Runnable()
{
public void run()
{
try
{
// 开启一个线程进行远程文件下载
getDataSource(strPath);
} catch (Exception e)
{
Log.e(TAG, e.getMessage(), e);
}
}
};
new Thread(r).start();
} catch (Exception e)
{
e.printStackTrace();
}
}
/* 取得远程文件 */
private void getDataSource(String strPath) throws Exception
{
//如果是一个正确的网址,就返回true
if (!URLUtil.isNetworkUrl(/blog_article/strPath/index.html))
{
mTextView01.setText("错误的URL");
} else
{
/* 取得URL */
URL myURL = new URL(strPath);
/* 创建连接 */
URLConnection conn = myURL.openConnection();
conn.connect();
/* InputStream 下载文件 */
InputStream is = conn.getInputStream();
if (is == null)
{
throw new RuntimeException("stream is null");
}
// 创建临时文件
// 两个参数分别为前缀和后缀
File myTempFile = File.createTempFile(fileNa, "." + fileEx);
/* 取得站存盘案路径 */
currentTempFilePath = myTempFile.getAbsolutePath();
/* 将文件写入暂存盘 */
FileOutputStream fos = new FileOutputStream(myTempFile);
byte buf[] = new byte[128];
do
{
int numread = is.read(buf);
if (numread <= 0)
{
break;
}
fos.write(buf, 0, numread);
} while (true);
// 打开文件进行安装(下载完成后执行的操作)
openFile(myTempFile);
try
{
is.close();
} catch (Exception ex)
{
Log.e(TAG, "error: " + ex.getMessage(), ex);
}
}
}
// 在手机上打开文件的method
private void openFile(File f)
{
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
/* 调用getMIMEType()来取得MimeType */
String type = getMIMEType(f);
/* 设置intent的file与MimeType */
intent.setDataAndType(Uri.fromFile(f), type);
startActivity(intent);
}
/* 判断文件MimeType的method */
private String getMIMEType(File f)
{
String type = "";
String fName = f.getName();
/* 取得扩展名 */
String end = fName.substring(fName.lastIndexOf(".") + 1, fName.length())
.toLowerCase();
/* 依扩展名的类型决定MimeType */
if (end.equals("m4a") || end.equals("mp3") || end.equals("mid")
|| end.equals("xmf") || end.equals("ogg") || end.equals("wav"))
{
type = "audio";
} else if (end.equals("3gp") || end.equals("mp4"))
{
type = "video";
} else if (end.equals("jpg") || end.equals("gif") || end.equals("png")
|| end.equals("jpeg") || end.equals("bmp"))
{
type = "image";
} else if (end.equals("apk"))
{
/* android.permission.INSTALL_PACKAGES */
type = "application/vnd.android.package-archive";
} else
{
type = "*";
}
/* 如果无法直接打开,就跳出软件列表给用户选择 */
if (end.equals("apk"))
{
} else
{
type += "/*";
}
return type;
}
/* 自定义删除文件方法 */
private void delFile(String strFileName)
{
File myFile = new File(strFileName);
if (myFile.exists())
{
myFile.delete();
}
}
/* 当Activity处于onPause状态时,更改TextView文字状态 */
@Override
protected void onPause()
{
mTextView01 = (TextView) findViewById(R.id.myTextView1);
mTextView01.setText("下载成功");
super.onPause();
}
/* 当Activity处于onResume状态时,删除临时文件 */
@Override
protected void onResume()
{
// TODO Auto-generated method stub
/* 删除临时文件 */
delFile(currentTempFilePath);
super.onResume();
}
}
另外例子中还可以通过
Java代码
System.out.println("conn.getContentLength() =" + conn.getContentLength());
System.out.println("conn.getContentLength() =" + conn.getContentLength());获取下载文件的大小,然后来实现PrgressBar的下载进度显示
废话少说,直接上代码,会加上详细注释:
测试地址:http://www.dubblogs.cc:8751/Android/Test/Apk/EX04_14.apk
Java代码
package cn.com;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.URLUtil;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
/*必须引用java.io与java.net*/
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class InstallUrlApk extends Activity
{
private TextView mTextView01;
private EditText mEditText01;
//点击下载的按钮
private Button mButton01;
private static final String TAG = "DOWNLOADAPK";
private String currentFilePath = "";
private String currentTempFilePath = "";
private String strURL = "";
private String fileEx = "";
private String fileNa = "";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView01 = (TextView) findViewById(R.id.myTextView1);
mButton01 = (Button) findViewById(R.id.myButton1);
mEditText01 = (EditText) findViewById(R.id.myEditText1);
mButton01.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
/* 文件会下载至local端 */
mTextView01.setText("下载中...");
strURL = mEditText01.getText().toString();
/取得欲安装程序之文件名称(后缀名)
fileEx = strURL.substring(strURL.lastIndexOf(".") + 1, strURL.length())
.toLowerCase();
System.out.println("***************fileEx =" + fileEx);
fileNa = strURL.substring(strURL.lastIndexOf("/") + 1, strURL
.lastIndexOf("."));
System.out.println("***************fileNa =" + fileNa);
//开启一个子线程进行文件的下载
getFile(strURL);
}
});
mEditText01.setOnClickListener(new EditText.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
mEditText01.setText("");
mTextView01.setText("远程安装程序(请输入URL)");
}
});
}
/* 处理下载URL文件自定义函数 */
private void getFile(final String strPath)
{
try
{
if (strPath.equals(currentFilePath))
{
getDataSource(strPath);
}
currentFilePath = strPath;
Runnable r = new Runnable()
{
public void run()
{
try
{
// 开启一个线程进行远程文件下载
getDataSource(strPath);
} catch (Exception e)
{
Log.e(TAG, e.getMessage(), e);
}
}
};
new Thread(r).start();
} catch (Exception e)
{
e.printStackTrace();
}
}
/* 取得远程文件 */
private void getDataSource(String strPath) throws Exception
{
//如果是一个正确的网址,就返回true
if (!URLUtil.isNetworkUrl(/blog_article/strPath/index.html))
{
mTextView01.setText("错误的URL");
} else
{
/* 取得URL */
URL myURL = new URL(strPath);
/* 创建连接 */
URLConnection conn = myURL.openConnection();
conn.connect();
/* InputStream 下载文件 */
InputStream is = conn.getInputStream();
if (is == null)
{
throw new RuntimeException("stream is null");
}
// 创建临时文件
// 两个参数分别为前缀和后缀
File myTempFile = File.createTempFile(fileNa, "." + fileEx);
/* 取得站存盘案路径 */
currentTempFilePath = myTempFile.getAbsolutePath();
/* 将文件写入暂存盘 */
FileOutputStream fos = new FileOutputStream(myTempFile);
byte buf[] = new byte[128];
do
{
int numread = is.read(buf);
if (numread <= 0)
{
break;
}
fos.write(buf, 0, numread);
} while (true);
// 打开文件进行安装(下载完成后执行的操作)
openFile(myTempFile);
try
{
is.close();
} catch (Exception ex)
{
Log.e(TAG, "error: " + ex.getMessage(), ex);
}
}
}
// 在手机上打开文件的method
private void openFile(File f)
{
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
/* 调用getMIMEType()来取得MimeType */
String type = getMIMEType(f);
/* 设置intent的file与MimeType */
intent.setDataAndType(Uri.fromFile(f), type);
startActivity(intent);
}
/* 判断文件MimeType的method */
private String getMIMEType(File f)
{
String type = "";
String fName = f.getName();
/* 取得扩展名 */
String end = fName.substring(fName.lastIndexOf(".") + 1, fName.length())
.toLowerCase();
/* 依扩展名的类型决定MimeType */
if (end.equals("m4a") || end.equals("mp3") || end.equals("mid")
|| end.equals("xmf") || end.equals("ogg") || end.equals("wav"))
{
type = "audio";
} else if (end.equals("3gp") || end.equals("mp4"))
{
type = "video";
} else if (end.equals("jpg") || end.equals("gif") || end.equals("png")
|| end.equals("jpeg") || end.equals("bmp"))
{
type = "image";
} else if (end.equals("apk"))
{
/* android.permission.INSTALL_PACKAGES */
type = "application/vnd.android.package-archive";
} else
{
type = "*";
}
/* 如果无法直接打开,就跳出软件列表给用户选择 */
if (end.equals("apk"))
{
} else
{
type += "/*";
}
return type;
}
/* 自定义删除文件方法 */
private void delFile(String strFileName)
{
File myFile = new File(strFileName);
if (myFile.exists())
{
myFile.delete();
}
}
/* 当Activity处于onPause状态时,更改TextView文字状态 */
@Override
protected void onPause()
{
mTextView01 = (TextView) findViewById(R.id.myTextView1);
mTextView01.setText("下载成功");
super.onPause();
}
/* 当Activity处于onResume状态时,删除临时文件 */
@Override
protected void onResume()
{
// TODO Auto-generated method stub
/* 删除临时文件 */
delFile(currentTempFilePath);
super.onResume();
}
}
package cn.com;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.URLUtil;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
/*必须引用java.io与java.net*/
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class InstallUrlApk extends Activity
{
private TextView mTextView01;
private EditText mEditText01;
//点击下载的按钮
private Button mButton01;
private static final String TAG = "DOWNLOADAPK";
private String currentFilePath = "";
private String currentTempFilePath = "";
private String strURL = "";
private String fileEx = "";
private String fileNa = "";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView01 = (TextView) findViewById(R.id.myTextView1);
mButton01 = (Button) findViewById(R.id.myButton1);
mEditText01 = (EditText) findViewById(R.id.myEditText1);
mButton01.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
/* 文件会下载至local端 */
mTextView01.setText("下载中...");
strURL = mEditText01.getText().toString();
/取得欲安装程序之文件名称(后缀名)
fileEx = strURL.substring(strURL.lastIndexOf(".") + 1, strURL.length())
.toLowerCase();
System.out.println("***************fileEx =" + fileEx);
fileNa = strURL.substring(strURL.lastIndexOf("/") + 1, strURL
.lastIndexOf("."));
System.out.println("***************fileNa =" + fileNa);
//开启一个子线程进行文件的下载
getFile(strURL);
}
});
mEditText01.setOnClickListener(new EditText.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
mEditText01.setText("");
mTextView01.setText("远程安装程序(请输入URL)");
}
});
}
/* 处理下载URL文件自定义函数 */
private void getFile(final String strPath)
{
try
{
if (strPath.equals(currentFilePath))
{
getDataSource(strPath);
}
currentFilePath = strPath;
Runnable r = new Runnable()
{
public void run()
{
try
{
// 开启一个线程进行远程文件下载
getDataSource(strPath);
} catch (Exception e)
{
Log.e(TAG, e.getMessage(), e);
}
}
};
new Thread(r).start();
} catch (Exception e)
{
e.printStackTrace();
}
}
/* 取得远程文件 */
private void getDataSource(String strPath) throws Exception
{
//如果是一个正确的网址,就返回true
if (!URLUtil.isNetworkUrl(/blog_article/strPath/index.html))
{
mTextView01.setText("错误的URL");
} else
{
/* 取得URL */
URL myURL = new URL(strPath);
/* 创建连接 */
URLConnection conn = myURL.openConnection();
conn.connect();
/* InputStream 下载文件 */
InputStream is = conn.getInputStream();
if (is == null)
{
throw new RuntimeException("stream is null");
}
// 创建临时文件
// 两个参数分别为前缀和后缀
File myTempFile = File.createTempFile(fileNa, "." + fileEx);
/* 取得站存盘案路径 */
currentTempFilePath = myTempFile.getAbsolutePath();
/* 将文件写入暂存盘 */
FileOutputStream fos = new FileOutputStream(myTempFile);
byte buf[] = new byte[128];
do
{
int numread = is.read(buf);
if (numread <= 0)
{
break;
}
fos.write(buf, 0, numread);
} while (true);
// 打开文件进行安装(下载完成后执行的操作)
openFile(myTempFile);
try
{
is.close();
} catch (Exception ex)
{
Log.e(TAG, "error: " + ex.getMessage(), ex);
}
}
}
// 在手机上打开文件的method
private void openFile(File f)
{
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
/* 调用getMIMEType()来取得MimeType */
String type = getMIMEType(f);
/* 设置intent的file与MimeType */
intent.setDataAndType(Uri.fromFile(f), type);
startActivity(intent);
}
/* 判断文件MimeType的method */
private String getMIMEType(File f)
{
String type = "";
String fName = f.getName();
/* 取得扩展名 */
String end = fName.substring(fName.lastIndexOf(".") + 1, fName.length())
.toLowerCase();
/* 依扩展名的类型决定MimeType */
if (end.equals("m4a") || end.equals("mp3") || end.equals("mid")
|| end.equals("xmf") || end.equals("ogg") || end.equals("wav"))
{
type = "audio";
} else if (end.equals("3gp") || end.equals("mp4"))
{
type = "video";
} else if (end.equals("jpg") || end.equals("gif") || end.equals("png")
|| end.equals("jpeg") || end.equals("bmp"))
{
type = "image";
} else if (end.equals("apk"))
{
/* android.permission.INSTALL_PACKAGES */
type = "application/vnd.android.package-archive";
} else
{
type = "*";
}
/* 如果无法直接打开,就跳出软件列表给用户选择 */
if (end.equals("apk"))
{
} else
{
type += "/*";
}
return type;
}
/* 自定义删除文件方法 */
private void delFile(String strFileName)
{
File myFile = new File(strFileName);
if (myFile.exists())
{
myFile.delete();
}
}
/* 当Activity处于onPause状态时,更改TextView文字状态 */
@Override
protected void onPause()
{
mTextView01 = (TextView) findViewById(R.id.myTextView1);
mTextView01.setText("下载成功");
super.onPause();
}
/* 当Activity处于onResume状态时,删除临时文件 */
@Override
protected void onResume()
{
// TODO Auto-generated method stub
/* 删除临时文件 */
delFile(currentTempFilePath);
super.onResume();
}
}
另外例子中还可以通过
Java代码
System.out.println("conn.getContentLength() =" + conn.getContentLength());
System.out.println("conn.getContentLength() =" + conn.getContentLength());获取下载文件的大小,然后来实现PrgressBar的下载进度显示
最新技术文章: