通过U盘更新程序
来源:互联网 发布:数控仿真软件下载 编辑:程序博客网 时间:2024/05/22 09:51
流程:监听U盘插拔事件,弹出对话框询问是否升级,如果升级则调用升级模块。
package com.updatedemo;import java.io.File;import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.app.AlertDialog;import android.app.Dialog;import android.content.BroadcastReceiver;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.content.IntentFilter;import android.content.pm.PackageManager.NameNotFoundException;import android.text.style.UpdateAppearance;import android.text.style.UpdateLayout;import android.util.Log;import android.view.Menu;import android.widget.Toast;public class MainActivity extends Activity {private String TAG = "UdiskUpdateDemo";private String path = "/mnt/usbhost0/123.apk";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);udiskPluggedin(); // 监听U盘热插拔模块启动Log.i(TAG, "VesionName: " + getVesionName(this));Log.i(TAG, "VesionCode: " + getVersionCode(this));Log.i(TAG, "getPackageName: " + this.getPackageName());}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}/****************************** * 模块1:检测U盘热插拔事件 * * 使用IntentFilter来选择接收广播的类型 * 注册一个广播接收者来处理接收到广播的事件 * *****************************//* 监听U盘插拔 */private void udiskPluggedin() {IntentFilter filter = new IntentFilter();filter.addAction("android.hardware.usb.action.USB_STATE");filter.addAction("android.hardware.action.USB_DISCONNECTED");filter.addAction("android.hardware.action.USB_CONNECTED");filter.addAction("android.intent.action.UMS_CONNECTED");filter.addAction("android.intent.action.UMS_DISCONNECTED");// filter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);// filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED);// filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);// filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);filter.addAction(Intent.ACTION_MEDIA_CHECKING);filter.addAction(Intent.ACTION_MEDIA_MOUNTED);filter.addAction(Intent.ACTION_MEDIA_EJECT);filter.addAction(Intent.ACTION_MEDIA_REMOVED);filter.addDataScheme("file");// 系统中每个组件,如果想收取隐式事件(未指定接收者),则必须声明自己的IntentFilter(自我介绍,我对什么样的信件感兴趣)。UdiskReceiver mReceiver = new UdiskReceiver();registerReceiver(mReceiver, filter);}private class UdiskReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context arg0, Intent arg1) {String action = arg1.getAction();Log.v(TAG, "action = " + action);if (action.equals(Intent.ACTION_MEDIA_CHECKING)) {// Toast.makeText(getApplicationContext(), "正在挂载U盘",// Toast.LENGTH_SHORT).show();Log.i(TAG, "正在挂载U盘");} else if (action.equals(Intent.ACTION_MEDIA_MOUNTED)) {Toast.makeText(getApplicationContext(), "U盘挂载成功",Toast.LENGTH_SHORT).show();Log.i(TAG, "U盘挂载成功");// 显示是否更新对话框try {showUpdateDialog();} catch (NameNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}/* * Intent intent = new Intent(); * intent.setClassName("com.serviatech.test", * "com.serviatech.test.activity.UpdateActivity"); * intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// * Intent.FLAG_ACTIVITY_CLEAR_TOP | startActivity(intent); */} else if (action.equals(Intent.ACTION_MEDIA_EJECT)) {Toast.makeText(getApplicationContext(), "U盘已移除",Toast.LENGTH_SHORT).show();}}}/****************************** * 模块2:获取apk版本信息 * * AndroidManifest.xml中定义的 * android:versionName 和 VersionCode 信息。 * * *****************************//* * 功能:获取apk的VesionName,即AndroidManifest.xml中定义的android:versionName */public String getVesionName(Context context) {String versionName = null;try {versionName = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;} catch (NameNotFoundException e) {Log.e(TAG, e.getMessage());}return versionName;}// 功能:获取apk的versionCode,即AndroidManifest.xml中定义的android:versionCodepublic int getVersionCode(Context context) {int versionCode = 0;try {versionCode = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode;} catch (NameNotFoundException e) {Log.e(TAG, e.getMessage());}return versionCode;}/******************** * 模块3:弹出是否更新对话框 * * *****************/private void showUpdateDialog() throws NameNotFoundException {StringBuffer sb = new StringBuffer();sb.append("当前版本:");sb.append(getVesionName(this));sb.append(" VerCode:");sb.append(getVersionCode(this));sb.append("\n是否更新?");Dialog dialog = new AlertDialog.Builder(MainActivity.this).setTitle("软件更新").setMessage(sb.toString())// 设置内容.setPositiveButton("更新", // 设置确定按钮new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stub/************** * 更新核心代码 * * ***********/String fileName = path;Uri uri = Uri.fromFile(new File(fileName));Intent intent = new Intent(Intent.ACTION_VIEW);intent.setDataAndType(uri,"application/vnd.android.package-archive");startActivity(intent);}}).setNegativeButton("暂不更新",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int whichButton) {// 点击"取消"按钮之后退出程序finish();}}).create();// 创建dialog.show();}}
附:
// 在最新的Android版本中,android.hardware.USB是一个新增类filter.addAction("android.hardware.usb.action.USB_STATE");filter.addAction("android.hardware.action.USB_DISCONNECTED");filter.addAction("android.hardware.action.USB_CONNECTED");// 设备进入 USB 大容量存储模式filter.addAction("android.intent.action.UMS_CONNECTED");// 设备从 USB 大容量存储模式退出filter.addAction("android.intent.action.UMS_DISCONNECTED");// 插入外部储存装置,比如SD卡时,系统会检验SD卡,此时发出的广播?filter.addAction(Intent.ACTION_MEDIA_CHECKING);// 插入SD卡并且已正确安装(识别)时发出的广播filter.addAction(Intent.ACTION_MEDIA_MOUNTED);// 已拔掉外部大容量储存设备发出的广播(比如SD卡,或移动硬盘),不管有没有正确卸载都会发出此广播filter.addAction(Intent.ACTION_MEDIA_EJECT);// 广播:扩展介质被移除。filter.addAction(Intent.ACTION_MEDIA_REMOVED);
相关文章:
Android 程序自动更新
Android应用开发笔记(12):Android应用的自动升级、更新模块的实现
apk在线升级
0 0
- 通过U盘更新程序
- stm32 bootloader 通过U盘更新APP程序
- Linux下通过程序实现自动挂载U盘
- MPC8313ERDB 通过tftp更新u-boot
- Android中通过其他线程更新主线程U…
- 感染U盘程序
- U盘安装程序
- 简单实现stm32f103芯片usb模拟U盘进行IAP更新用户程序
- 台电 8G U盘通过量产程序实现USB-CDROM启动
- JZ2440 U-boot 通过tftp下载裸板程序
- OK6410 U-boot 通过tftp下载裸板程序
- U盘检测的程序
- U盘自动运行程序
- U盘安装Centos 更新raid驱动
- imx6 U盘更新的方法
- 通过U盘传播的“病毒”
- 通过udev自动挂载U盘
- 通过 U 盘安装 Windows Server 2008
- 常用宏定义和设备的判断
- UVa 138 Street Numbers
- String、StringBuilder、StringBuffer类之间的区别与联系
- 工资排序。。
- Monkeyrunner的环境配置
- 通过U盘更新程序
- java bean
- 建设网络强国,反制黑客入侵
- 第八章 多元函数微分法及其应用
- 【项目1-三角形类的构造函数】-使用有默认参数的构造函数
- java面试题及答案(基础题122道,代码题19道)
- 【转】如何正确配置Nginx+PHP
- SoapUI socket time out
- PHP程序员的C学习之路3 - 第二章, const关键字和常量