mysql数据字典
android代码
//显示正在下载对话框
protected void showDownloadDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle("更新版本中");
View view = LayoutInflater.from(mContext).inflate(R.layout.dialog_progress, null);
mProgressBar = (ProgressBar) view.findViewById(R.id.id_progress);
builder.setView(view);
// builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface dialog, int which) {
// dialog.dismiss();// 隐藏当前对话框
// mIsCancel = true;// 设置下载状态为取消
// }
// });
mDownloadDialog = builder.create();
mDownloadDialog.show();
// 下载文件
downloadAPK();
}
//开启新线程下载apk文件
private void downloadAPK() {
new Thread(new Runnable() {
@Override
public void run() {
try{ // MEDIA_MOUNTED--SD卡正常挂载 、/mnt/sdcard目录存在 、可读、可写、可在该目录下面创建文件、文件夹
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//获取扩展存储设备的文件目录---Environment.getExternalStorageDirectory()
String sdPath = Environment.getExternalStorageDirectory() + "/";
// apk文件保存路径
mSavePath = sdPath + "eqptdownload";
Log.i(TAG, "设备管理mSavePath--"+mSavePath);
//定义一个目录
File dir = new File(mSavePath);
//如果目录不存在,就创建该目录
if (!dir.exists()){
dir.mkdir();
Log.i(TAG, "创建目录成功");
}
// 下载文件
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.connect();
//用getInputStream()方法获得服务器返回的输入流
InputStream is = conn.getInputStream();
int length = conn.getContentLength();
Log.i(TAG, "创建file对象");
//创建一个file对象
File apkFile = new File(mSavePath, mVersion_name);
Log.i(TAG, "创建file对象成功");
//创建FileOutputStream流把数据写到apkFile文件中
FileOutputStream fos = new FileOutputStream(apkFile);
Log.i(TAG, "创建FileOutputStream流");
int count = 0;
//流转换为二进制数组,read()是转换方法
byte[] buffer = new byte[1024];
while (!mIsCancel){
int numread = is.read(buffer);
// System.out.println("numread--"+numread);
count += numread;
// System.out.println("count--"+count);
// 计算进度条的当前位置
mProgress = (int) (((float)count/length) * 100);
// 更新进度条
mUpdateProgressHandler.sendEmptyMessage(1);
// 下载完成
if (numread < 0){
mUpdateProgressHandler.sendEmptyMessage(2);
Log.i(TAG, "下载完成");
break;
}
//一次最多读取的字节数不超过numread
fos.write(buffer, 0, numread);
}
fos.close();
is.close();
}
else {
Log.i(TAG, "找不到路径1");
}
}catch(Exception e){
Log.i(TAG, "找不到路径2");
e.printStackTrace();
Log.i(TAG, "异常信息--"+e.toString());
}
}
}).start();
}
//接收消息
private Handler mUpdateProgressHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 1:
// 设置进度条
mProgressBar.setProgress(mProgress);
break;
case 2:
// 隐藏当前下载对话框
mDownloadDialog.dismiss();
// 安装 APK 文件
installAPK();
}
};
};
//下载到本地后执行安装
protected void installAPK() {
File apkFile = new File(mSavePath, mVersion_name);
if (!apkFile.exists()){
Log.i(TAG, "未找到apk文件");
}
else {
Log.i(TAG, "有找到apk文件");
// 下载完之后,使用intent弹出一个安装对话框
Intent intent = new Intent(Intent.ACTION_VIEW);
// 安装完成后,启动app(源码中少了这句话)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.parse("file://" + apkFile.toString());
// "application/vnd.android.package-archive"是文件类型,具体对应apk类型。
intent.setDataAndType(uri, "application/vnd.android.package-archive");
mContext.startActivity(intent); //弹出一个安装对话框
//自动静默安装apk,无需用户确认
// if( slientInstall(apkFile) ) {
Log.i(TAG, "安装成功!");
//增加设备下载apk记录
string = "wf_eqpt#insert_eqpt#s#INSERT INTO `install_list`(`install_version`, `install_date`, `ip`, `mac`, `respon`) VALUES('"+versionStr[0][0]+"', NOW(), '"+ip+"', '"+myMac+"', '"+job_edit.getText().toString()+"');";
//使用socket从服务器获取数据
get_from_socket(string);
// }
}
}
//android 静默安装并启动
public static boolean slientInstall(File apk_file) { // String tempPath
// File file = new File(tempPath);
File file=apk_file;
boolean result = false;
Process process = null;
OutputStream out = null;
if (file.exists()) {
System.out.println(file.getPath() + "==");
try {
process = Runtime.getRuntime().exec("su");
out = process.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(out);
// 获取文件所有权限
dataOutputStream.writeBytes("chmod 777 " + file.getPath() + "\n");
// 进行静默安装命令
dataOutputStream
.writeBytes("LD_LIBRARY_PATH=/vendor/lib:/system/lib pm install -r "
+ file.getPath());
dataOutputStream.flush();
// 关闭流操作
dataOutputStream.close();
out.close();
int value = process.waitFor();
// 代表成功
if (value == 0) {
result = true;
// 失败
} else if (value == 1) {
result = false;
// 未知情况
} else {
result = false;
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
if (!result) {
result = true;
}
}
return result;
}
//获取当前版本号
public String getVersion() {
try {
PackageManager manager = this.getPackageManager();
PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0);
String version = info.versionName;
return version;
}
catch (Exception e) {
e.printStackTrace();
//找不到版本号
return "";
}
}
```
## 设置权限
```java
<!-- 开启网络访问权限 -->
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
<!-- 允许访问网络状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 允许访问wifi状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 允许修改网络状态的权限 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" >
</uses-permission>
<!-- 允许修改wifi状态的权限 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 往sdcard中写入数据的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
运行结果
版权声明:本文为weixuan_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。