Android系统SD卡升级
二、详细代码
1.AndroidManifest.xml
<pre style="font-family: Consolas; font-size: 9.8pt; background-color: rgb(255, 255, 255);"><pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.windy.sdcardupgrade"android:sharedUserId="android.uid.system"><uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" /><uses-permission android:name="android.permission.MASTER_CLEAR" /><uses-permission android:name="android.permission.REBOOT" /><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><activityandroid:name=".SdCardUpgradeWarning"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".SdCardUpgradeIntroduction"></activity><activityandroid:name=".SdCardUpgradeProcess"android:configChanges="keyboardHidden|orientation"android:screenOrientation="portrait"></activity></application></manifest>
注意添加 android:sharedUserId="android.uid.system",否则一些系统权限无法使用,如重启。
2.SdCardUpgradeWarning.java
public class SdCardUpgradeWarning extends Activity implements View.OnClickListener {private static final String TAG = "SdCardUpgradeWarning";private static String updatePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/update.zip";private Button mCancle;private Button mConfirm;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.sdcardupgrade_warning);mCancle = (Button) findViewById(R.id.cancle);mCancle.setOnClickListener(this);mConfirm = (Button) findViewById(R.id.confirm);mConfirm.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.cancle:finish();break;case R.id.confirm:confirmUpdatePackageExist();break;default:break;}}public void confirmUpdatePackageExist() {File updatePackage = new File(updatePath);if (isFileExist(updatePackage)) {boolean isZipfileExist = updatePackage.exists();if (!isZipfileExist) {Toast toast = Toast.makeText(getApplicationContext(), getString(R.string.update_package_not_found), Toast.LENGTH_LONG);toast.setGravity(0, 0, 100);toast.show();} else {Intent intent = new Intent();intent.setClass(this, SdCardUpgradeIntroduction.class);startActivity(intent);}} else {Toast toast = Toast.makeText(getApplicationContext(), getString(R.string.sdcard_not_mounted), Toast.LENGTH_LONG);toast.setGravity(0, 0, 100);toast.show();}}public boolean isFileExist(File file) {if (file.exists()) {return true;} else {Log.d(TAG, "Update zip file not exist.");return false;}}}
3.SdCardUpgradeIntroduction.java
public class SdCardUpgradeIntroduction extends Activity implements View.OnClickListener {private Button mcancle;private Button mconfirm;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.sdcardupgrade_introduction);mcancle=(Button)findViewById(R.id.cancle);mcancle.setOnClickListener(this);mconfirm=(Button)findViewById(R.id.confirm);mconfirm.setOnClickListener(this);}@Overridepublic void onClick(View v){switch(v.getId()){case R.id.cancle:finish();break;case R.id.confirm:Intent intent = new Intent();intent.setClass(this, SdCardUpgradeProcess.class);startActivity(intent);break;default:break;}}}
4.SdCardUpgradeProcess.java
public class SdCardUpgradeProcess extends Activity implements RecoverySystem.ProgressListener {private static final String TAG = "SdCardUpgradeProcess";private static final int VERIFY_COMPLETE = 70;private static final int INSTALL_COMPLETE = 100;private static String updatePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/update.zip";private ProgressBar mProcessbar;private TextView mUpdateStep;private TextView mUpdateState;private TextView mNotify;private TextView sdcard_update_introduction_textview_one;private TextView sdcard_update_introduction_textview_two;private ImageView mCompleteImg;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.sdcardupgrade_processbar);mUpdateStep = (TextView)findViewById(R.id.step_number);mUpdateState = (TextView)findViewById(R.id.processbar_title);mNotify = (TextView)findViewById(R.id.update_notify);mCompleteImg = (ImageView)findViewById(R.id.update_complete);mProcessbar=(ProgressBar)findViewById(R.id.processbar);mProcessbar.setMax(110);mProcessbar.setProgress(0);mProcessbar.setIndeterminate(false);runnable.start();}Handler mHandler = new Handler(){public void handleMessage(Message msg) {mProcessbar.setProgress(msg.arg1);switch(msg.arg1){case VERIFY_COMPLETE:mUpdateStep.setText(getString(R.string.the_next_step_number));mUpdateState.setText(getString(R.string.install_process));mNotify.setText("");break;case INSTALL_COMPLETE:mUpdateState.setText(getString(R.string.install_process_complete));mNotify.setText(getString(R.string.restart));mCompleteImg.setBackgroundResource(R.drawable.update_complete);break;default:break;}}};Thread runnable = new Thread(){@Overridepublic void run() {Log.d(TAG, "Start update .............");File file = new File(updatePath);PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "SdCardUpgrade ProcessBar");try{wl.acquire();//升级保持亮屏状态RecoverySystem.verifyPackage(file, SdCardUpgradeProcess.this, null);Log.d(TAG,"Verify package complete.");RecoverySystem.installPackage(SdCardUpgradeProcess.this, file);}catch(Exception e){Log.e(TAG, e.getMessage(), e);}finally{wl.release();}}};@Overridepublic void onProgress(int progress) {Log.d(TAG,"progress="+progress);Message msg = Message.obtain();msg.arg1 = progress;mHandler.sendMessage(msg);}@Overridepublic void onBackPressed() {// TODO Auto-generated method stubSystem.exit(0);}
}
5.下面是三个布局文件
sdcardupgrade_warning.xml
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="5dp"><TextViewandroid:id="@+id/sdCard_upgrade_textview_one"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="@string/sdcard_upgrade_warning_title"android:textSize="22dp" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/sdcard_update_image_first"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/sdcard_upgrade_warning" /><TextViewandroid:id="@+id/sdCard_upgrade_textview_two"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_toRightOf="@id/sdcard_update_image_first"android:text="@string/sdcard_upgrade_warning_list_first"android:textSize="18dp" /><ImageViewandroid:id="@+id/sdcard_update_image_second"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/sdCard_upgrade_textview_two"android:background="@drawable/sdcard_upgrade_warning" /><TextViewandroid:id="@+id/sdCard_upgrade_textview_three"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/sdCard_upgrade_textview_two"android:layout_toRightOf="@id/sdcard_update_image_second"android:text="@string/sdcard_upgrade_warning_list_second"android:textSize="18dp" /><ImageViewandroid:id="@+id/sdcard_update_image_third"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/sdCard_upgrade_textview_three"android:background="@drawable/sdcard_upgrade_warning" /><TextViewandroid:id="@+id/sdCard_upgrade_textview_four"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/sdCard_upgrade_textview_three"android:layout_toRightOf="@id/sdcard_update_image_third"android:text="@string/sdcard_upgrade_warning_list_third"android:textSize="18dp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="bottom"android:orientation="horizontal"><Buttonandroid:id="@+id/cancle"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:text="@string/sdcard_upgrade_cancle" /><Buttonandroid:id="@+id/confirm"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_toRightOf="@id/cancle"android:layout_weight="1"android:gravity="center"android:text="@string/sdcard_upgrade_confirm" /></LinearLayout></RelativeLayout>
</LinearLayout>
sdcardupgrade_introduction.xml
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"android:padding="5dp"><TextViewandroid:id="@+id/sdCard_upgrade_introduction_one"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/sdcard_upgrade_introduction"android:textSize="18dp" /><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="bottom"android:orientation="horizontal"><Buttonandroid:id="@+id/cancle"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="@string/sdcard_upgrade_cancle" /><Buttonandroid:id="@+id/confirm"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="@string/sdcard_upgrade_confirm" /></LinearLayout>
</LinearLayout>
sdcardupgrade_processbar.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="36dp"><TextViewandroid:id="@+id/processbar_step"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center"android:text="@string/sdcardupgrade_step_one"android:textSize="20dp" /><TextViewandroid:id="@+id/step_number"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center"android:text="@string/the_step_number"android:textSize="20dp" /><TextViewandroid:id="@+id/processbar_title"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center"android:text="@string/sdcardupgrade_title_one"android:textSize="35dp" /><ProgressBarandroid:id="@+id/processbar"style="?android:attr/progressBarStyleHorizontal"android:layout_width="240dp"android:layout_height="wrap_content"android:layout_gravity="center"android:padding="10dp"android:visibility="visible" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="bottom"android:orientation="vertical"><ImageViewandroid:id="@+id/update_complete"android:layout_width="45dp"android:layout_height="40dp"android:layout_gravity="center" /><TextViewandroid:id="@+id/update_notify"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center_vertical"android:padding="3dp"android:text="@string/update_introduction"android:textSize="20dp" /></LinearLayout>
</LinearLayout>
6.字符串资源文件
<resources><string name="app_name">SdCardUpgrade</string><string name="action_settings">Settings</string><!-- Add for sdcard upgrade--><string name="settings_storage_software_upgrade">SoftWare Upgrade</string><string name="settings_storage_sdcard_upgrade">SD card Upgrade</string><string name="sdcard_upgrade_warning_title">Warning</string><string name="sdcard_upgrade_warning_list_first">During the upgrade,do not remove the battery,UIM card,and SD card.</string><string name="sdcard_upgrade_warning_list_second">Make sure that the battery level is sufficent.</string><string name="sdcard_upgrade_warning_list_third">You are recommanded to back up data to SD card before upgrade.</string><string name="sdcard_upgrade_cancle">Cancle</string><string name="sdcard_upgrade_confirm">Confirm</string><string name="sdcard_upgrade_introduction">The upgrade takes about two minutes.Do not perform any operations during the upgrade.The upgrade application will automatically stop in 30s.</string><string name="sdcardupgrade_step_one">Firmware update</string><string name="sdcardupgrade_title_one">Unpacking...</string><string name="update_introduction">The full update will take about 2 minutes.Please do not turn off the device during this period.</string><string name="update_introduction_two">Do not turn off the device.</string><string name="the_step_number">Step 1/2</string><string name="the_next_step_number">Step 2/2</string><string name="install_process">Install...</string><string name="install_process_complete">Update Complete!</string><string name="restart">restart...</string><string name="update_package_not_found">No update package found!</string><string name="sdcard_not_mounted">SD card not mounted!</string>
</resources>
注意:
生成apk后需要使用平台签名文件进行签名,或者在Android.mk文件中配置签名属性并在源码中编译,否则无法运行。
三、最终效果图
Android系统SD卡升级相关推荐
- android通过sd卡升级步骤,夏新N820如何通过SD卡升级Android 4.1?
夏新N820如何通过SD卡升级Android 4.1?刷机之家小编今天带来了升级教程,需要升级到Android 4.1的同学赶快来看看吧. 注意:升级版本会清除所有联系人,信息等等用户数据,请提前备份 ...
- Android系统SD卡各类文件夹名称
1..android_secure:官方app2sd的产物,存储了相关的软件使用认证验证,删除之后SD卡中的软件将无法使用. 2.Android:存放重要的程序数据,比如google:map的地图缓存 ...
- android 华为sd卡路径,(科普)详解Android系统SD卡各类文件夹名称
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 系统数据类--系统文件存储相关文件夹 1..android_secure:官方app2sd的产物,存储了相关的软件使用认证验证,删除之后SD卡中的软件将无 ...
- 华为荣耀3c语言设置在哪个文件夹,(科普)详解Android系统SD卡各类文件夹名称...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 系统数据类--系统文件存储相关文件夹 1..android_secure:官方app2sd的产物,存储了相关的软件使用认证验证,删除之后SD卡中的软件将无 ...
- android通过sd卡升级步骤,安卓手机用储存卡怎么升级具体步骤 ????
你好! 如果你说的升级手机内存的方法是指扩展内存物理大小的方法,那么可以明确告诉你唯一的方法就是拆机改装,不过一般人都不会,除非是搞这方面的专业人士,而且这么做既费钱又有风险,还不如换个大内存的手机. ...
- Android系统SD卡管理
博客声明: 1. 使用 android2.1 源码说明问题 2. 使用真机,操作系统是 android-2.1 3. 分享一下学习方法,不是为了测试而测试,请大家举一反三 结合 Service 与 B ...
- android系统sd卡cid修改,Bluestacks Sd卡文件目录修改方法
Bluestacks文件夹在哪?Bluestacks Sd卡文件目录怎样修改?Bluestacks默认把虚拟文件放在C盘中,当安装的应用多时Bluestacks的虚拟文件可以达到几十G,导致系统盘空间 ...
- 【Tiny4412】烧写Android系统(SD卡)
00. 目录 文章目录 00. 目录 01. 编译内核 02. 安装dnw工具 03. 安装Android_tools 04. 烧写Android系统 05. 问题解决 06. 附录 01. 编译内核 ...
- android sd卡名称,科普详解Android系统SD卡各类文件夹名称
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 15.moji:墨迹天气的缓存目录. 16.MusicFolders:poweramp产生的缓存文件夹. 17.openfeint:openfeint的缓 ...
最新文章
- Intellij idea高效使用教程
- ASP.NET中的图片路径问题
- 一次学5句简单英语口语
- Exif文件格式描述
- 数组对象的slice和splice方法
- 周鸿祎评互联网大佬的编程能力:我能排前三
- Bypass功能及原理介绍
- gre计算机考试成绩查询,2016年GRE考试成绩查询方法及出分时间最全介绍
- html css 书签,CSS实现书签图案的效果
- Scala基础入门(二) Scala下载、安装教程
- 计算机毕业设计安卓旅游APP源码
- 异或为什么满足结合律,布尔代数与布尔环简介
- mysql中between..and的用法
- Perfmon监控Windows进程性能
- java读取图片文字
- 神经网络权重是什么意思,神经网络权重调整方法
- 不推荐理财保险(分红险、投资连结险等)的几点理由---实际案例分析计算说明
- 汇总解决idea出现import包时报错Java:程序包xxxx不存在,但包确实存在的问题
- [C++学习] effective c++ 笔记 pass by value ,pass by reference
- c++|类静态成员之英雄类