很多网友ROOT、Recovery手机后,并不会真正实用手机的Recovery功能,面对全E文的操作界面,如何使用Recovery来备份手机数据、分区SD卡并刷入新的ROM,是大家最头疼的地方。现在,我把Recovery界面的各项功能,做简单介绍:
一、进入Recovery界面
完全关机后,同时按住手机音量下键 电源键可进入Recovery界面。进入后,使用电源上下键进行选项,使用电源键进行确认。
二、Recovery界面功能介绍
1、Reboot system now——重启
2、Backup/Restore——备份和还原,可以完整的将系统备份至SD卡中,适合经常刷机的朋友。备份还原中还包含以下选项:
Nand backup——Nand 备份
Nand ext backup——Nand 备份(系统和ext 分区一同备份)
Nand restore——还原(就是还原3-1、3-2 的最后一次备份)
BART backup——BART 备份 (包括系统和ext 分区)
BART restore——还原最后一次的BART备份
3、Flash zip from sdcard——从sd卡根目录的.zip ROM 刷机包刷机,这项算是常见的了,现在的新版本的recovery,一般都不需要把刷机包重命名为UPDATE.ZIP了,可以直接刷机。
4、Wipe——清除数据,这一项一般是在刷机前需要做的,清空个人数据,一般这个大项还包括以下的小项:
Wipe data/factory reset——清除内存数据和缓存数据
Wipe Dalvik-cache——清除缓存数据 ext 分区内数据
Wipe SD:ext partition——只清除ext 分区内数据
Wipe battery stats——清除电池数据
Wipe rotate settings——清除传感器内设置的数据
5、Partition sdcard——分区sd 卡,这个选项主要是用来做APP 2 SD的,需要将卡分为LINUX下的格式ext,一般有以下选项:
Partition SD——自动为sd 卡分区
Repair SD:ext——修复ext 分区
SD:ext2 to ext3——将ext2 分区转换为ext3 分区(推荐)
6-4、SD:ext3 to ext4——将ext3 分区转换为ext4 分区(C4 卡不推荐,C6 卡推荐)
原文地址: http://www.cnblogs.com/qianxudetianxia/archive/2011/04/26/2010930.html
友好的视觉感知和稳定的不出错表现,来自于我们追求美感和考虑的全面性,博客园从技术的角度,一直我都很欣赏。
这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用。
这一篇是对上一篇《Android学习系列(2)--App自动更新之通知栏下载》的补充,因此只是以点为要,点到为止。
1.内部存储
出于考虑到用户可能禁掉了SDCard或者电脑暂时插在电脑上且为磁盘连接状态等等,对于这么个情况下,我们应该也要保证我们的程序也是能正常的运行。所以我们要考虑内部存储。
我暂时把内部存储定在/data/data/xxxxxappxxxx/files目录,核心代码如下:
//创建目录和文件 if(android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState())){ updateDir = new File(Environment.getExternalStorageDirectory(),Global.downloadDir); }else{ //files目录 updateDir = getFilesDir(); } updateFile = new File(updateDir.getPath(),getResources().getString(titleId)+".apk");
2.内部存储的权限
一起都运行的正常,但是当我们帮下下来的apk文件执行运行操作的时候,确提示如下,
"解析包错误"??其实你下载的文件并不一定就是坏的或者错误的,也可能是android系统的权限在作怪。在你执行之前,加上如下核心代码:
String cmd = "chmod +x " +updateFile.getPath(); try { Runtime.getRuntime().exec(cmd); } catch (IOException e) { e.printStackTrace(); }
3.通知栏显示进度条组件的一个bug。
在通知栏设置进度条的可见性,会无缘无故的崩溃。
//下面一句是没有语法错误的,但是会导致程序出错 //为了解决这个问题,后面我们会再progressView外面包裹一层LinearLayout来控制可见性 updateNotification.contentView.setViewVisibility(progressViewID, View.GONE);
4.自定义进度条显示视图。
布局文件updata_nitification.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:layout_weight="2" android:paddingLeft="5dip"> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="left|center_vertical" android:orientation="horizontal" android:layout_weight="1"> <ImageView android:src="/blog_article/@drawable/icon/index.html" android:layout_width="24dip" android:layout_height="fill_parent" android:scaleType="fitCenter"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/app_name" android:textColor="#000000" android:paddingLeft="5dip" android:textSize="16dip"/> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="left" android:orientation="horizontal" android:layout_weight="1"> <TextView android:id="@+id/update_notification_progresstext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#8F8F8F" android:textSize="14dip"/> <LinearLayout android:id="@+id/update_notification_progressblock" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ProgressBar android:id="@+id/update_notification_progressbar" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout> </LinearLayout>
开始下载:
updateNotification.contentIntent = updatePendingIntent; updateNotification.contentView.setProgressBar(com.cnblogs.tianxia.subway.R.id.update_notification_progressbar, 100, 0, false); updateNotification.contentView.setTextViewText(com.cnblogs.tianxia.subway.R.id.update_notification_progresstext, "0%");
正在下载,显示下载进度条:
updateNotification.contentView.setProgressBar(com.cnblogs.tianxia.subway.R.id.update_notification_progressbar, 100, (int)(totalSize*100/updateTotalSize), false); updateNotification.contentView.setTextViewText(com.cnblogs.tianxia.subway.R.id.update_notification_progresstext, (int)(totalSize*100/updateTotalSize)+"%"); updateNotificationManager.notify(0, updateNotification);
下载完成,点击可以安装:
//点击安装PendingIntent Uri uri = Uri.fromFile(updateFile); Intent installIntent = new Intent(Intent.ACTION_VIEW); installIntent.setDataAndType(uri, "application/vnd.android.package-archive"); updatePendingIntent = PendingIntent.getActivity(UpdateService.this, 0, installIntent, 0); updateNotification.defaults = Notification.DEFAULT_SOUND;//铃声提醒 updateNotification.contentIntent = updatePendingIntent;//安装界面 updateNotification.contentView.setViewVisibility(com.cnblogs.tianxia.subway.R.id.update_notification_progressblock, View.GONE); updateNotification.contentView.setTextViewText(com.cnblogs.tianxia.subway.R.id.update_notification_progresstext, "下载完成,点击安装!"); updateNotificationManager.notify(0, updateNotification);
效果图如下:
如果你喜欢的话,请推荐一下,谢谢大家的支持!
之前遇到ListActivity数据更新后界面却没更新的问题。当时是直接重新跳转到这个Activity解决的,因为之前的操作
大多是跳转到一个新的界面对ListActivity的数据进行操作后再重新回来,因此用户不会发现有什么不同。今天遇到要直接
在ListActivity里对数据进行操作更新界面,再次遇到数据更新后界面却没更新的问题。查了一些资料后解决了。
如果使用ArrayAdapter,那么就不要再对ArrayAdapter中封装的List进行数据操作了,这样是没用ArrayAdapter
有类似add()、clear()等方法操作数据,然后用arrayAdapter.notifyDataSetChanged()和
ListActivity.setListAdapter(arrayAdapter)更新数据。如果使用CursorAdapter对应可执行cursor的requery()。
之后就打算开一个线程更新数据然后关闭之前打开的ProgressDialog。结果报了异常:
android.view.ViewRoot$CalledFromWrongThreadException:Only the original thread that created a view
hierarchy can touch its views.意思是说自定义的线程不能更新ui,只能在主线程里更新ui。
解决方法有两种:
1.在Activity.onCreate(Bundle savedInstanceState)中创建一个Handler类的实
例,重写Handler类的handleMessage方法,在其中调用更新界面显示的函数。
2.利用Activity.runOnUiThread(Runnable),将更新函数写在Runnable的run方法
中。
这样问题就解决了。