什么是NANDroid,如何加载NANDroid备份?

http://android.tgbus.com/lab/break/201207/445377.shtml

  一个完整的体统镜像可以被重新刷回手机。其不仅仅是简单备份,因为他包含了当前在你手机内存里的所有内容:Boot、Recovery、系统、数据、缓存,等。他是你手机整个ROM的快照。

  执行NANDroid备份的方法:进入clockwork recovery,进到“Backup and Restore”选项中执行。NANDroid备份将会被保存在sd卡ClockworkMod文件夹内。

  如何加载NANDroid备份?

  如果你可以进入clockwork recovery的话,只需简单的从他的菜单里加载NANDroid

  如果你的手机变砖从而无法进入clockwork recovery的话,也有最后一个方法:单独下载clockwork recovery至PC里,然后打开cmd控制台,进入存有clockwork recovery的目录,使用以下ADB命令刷写:“fastboot flash recovery recovery-clockwork-2.5.1.2-vision.img”。(前提是你的PC上有ADB环境,不过好像这招对白卡解锁的机器无用)

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(66) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
以下是一个简单的备份短信的 Android Studio 实验代码示例: ```java import android.Manifest; import android.content.ContentResolver; import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.Telephony; import android.util.Log; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class MainActivity extends AppCompatActivity { private static final int PERMISSIONS_REQUEST_READ_SMS = 100; private static final int PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 101; private static final String SMS_BACKUP_FILE_NAME = "sms_backup.txt"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Check if we have read SMS permission if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) { // Request permission ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_SMS}, PERMISSIONS_REQUEST_READ_SMS); } else { // Permission already granted backupSms(); } } private void backupSms() { // Check if we have write external storage permission if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { // Request permission ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE); } else { // Permission already granted ContentResolver contentResolver = getContentResolver(); Cursor cursor = contentResolver.query(Uri.parse("content://sms/"), null, null, null, null); if (cursor == null) { Log.e("SMS Backup", "Cursor is null"); Toast.makeText(this, "Failed to backup SMS", Toast.LENGTH_SHORT).show(); return; } try { File backupFile = new File(Environment.getExternalStorageDirectory(), SMS_BACKUP_FILE_NAME); FileOutputStream fos = new FileOutputStream(backupFile); OutputStreamWriter writer = new OutputStreamWriter(fos); // Write header writer.write("Address,Date,Type,Body\n"); // Loop through cursor and write to file while (cursor.moveToNext()) { String address = cursor.getString(cursor.getColumnIndex(Telephony.Sms.ADDRESS)); long date = cursor.getLong(cursor.getColumnIndex(Telephony.Sms.DATE)); String type = cursor.getString(cursor.getColumnIndex(Telephony.Sms.TYPE)); String body = cursor.getString(cursor.getColumnIndex(Telephony.Sms.BODY)); writer.write(String.format(Locale.getDefault(), "%s,%s,%s,%s\n", address, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(new Date(date)), type, body)); } writer.close(); fos.close(); Toast.makeText(this, "SMS backup completed", Toast.LENGTH_SHORT).show(); } catch (IOException e) { Log.e("SMS Backup", "Failed to backup SMS", e); Toast.makeText(this, "Failed to backup SMS", Toast.LENGTH_SHORT).show(); } finally { cursor.close(); } } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case PERMISSIONS_REQUEST_READ_SMS: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { backupSms(); } else { Toast.makeText(this, "Read SMS permission required", Toast.LENGTH_SHORT).show(); } break; case PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { backupSms(); } else { Toast.makeText(this, "Write external storage permission required", Toast.LENGTH_SHORT).show(); } break; } } } ``` 代码中使用了两个常量 `PERMISSIONS_REQUEST_READ_SMS` 和 `PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE` 来表示请求权限的请求码,备份短信的文件名为 `SMS_BACKUP_FILE_NAME`。 需要注意的是,该代码中只备份了收到的短信,对于发送的短信需要另行处理。此外,还需要在 AndroidManifest.xml 文件中添加读取短信和写入外部存储器的权限声明: ```xml <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值