have you declared this activity in your AndroidManifest.xml? 没加权限吧
java.lang.SecurityException: Not allowed to start service Intent { act=com.android.internal.os.storage.FORMAT_AND_FACTORY_RESET cmp=android/com.android.internal.os.storage.ExternalStorageFormatter } without permission android.permission.MASTER_CLEAR提示我需要android.permission.MASTER_CLEAR,但是这是系统级应用的权限,不知道LZ怎么加的我是这样写的: Intent intent = new Intent("com.android.internal.os.storage.FORMAT_AND_FACTORY_RESET"); ComponentName COMPONENT_NAME = new ComponentName("android", "com.android.internal.os.storage.ExternalStorageFormatter"); intent.setComponent(COMPONENT_NAME); startService(intent);
packages\apps\Settings\src\com\android\settings\MasterClearConfirm.java private Button.OnClickListener mFinalClickListener = new Button.OnClickListener() { public void onClick(View v) { if (Utils.isMonkeyRunning()) { return; } if (mEraseInternal) { Environment.setDefaultStorageType(Environment.StorageType.EMMC); try { Thread.sleep(200); } catch (Exception exp) { } Intent i = new Intent("android.intent.action.MASTER_CLEAR"); i.putExtra("IS_FORMAT", mEraseInternal); getActivity().sendBroadcast(i); } else { /* move format SD card action to method formateSDCard() */ getActivity().sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR")); } } };广播处理是在framework层frameworks\base\services\java\com\android\server\MasterClearReceiver.java至于相关权限在网上可以搜索下
我到现在还不明白,它擦除的是哪里的数据,是SdCard里面的数据吗?
if (mEraseSdCard) { Intent intent = new Intent(ExternalStorageFormatter.FORMAT_AND_FACTORY_RESET); intent.setComponent(ExternalStorageFormatter.COMPONENT_NAME); getActivity().startService(intent); } else { getActivity().sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR")); // Intent handling is asynchronous -- assume it will happen soon. } 上面代码是什么意思?判断SdCard是否存在?如果存在就Erase?不存在呢?发的广播是干嘛用的?
if (mEraseSdCard)是判断LZ出厂化时,是否勾选了个格式内置sd卡选项。 我不是说了吗 广播处理是在framework层frameworks\base\services\java\com\android\server\MasterClearReceiver.java 至于具体擦除那些东西是由底层驱动做的事情
要想实现恢复出厂设置,首先你的应用要有管理员权限,这个是用户授予你的
你可以看一下API文档
http://www.android-doc.com/guide/topics/admin/device-admin.html
而且,它并不重启,尽管是执行了,最后一直停留在正在关机的dialog画面,请问你是像那个例子那样做的吗?
Intent intent = new Intent("com.android.internal.os.storage.FORMAT_AND_FACTORY_RESET");
ComponentName COMPONENT_NAME
= new ComponentName("android", "com.android.internal.os.storage.ExternalStorageFormatter");
intent.setComponent(COMPONENT_NAME);
startService(intent);
次代码就是从Android2.2源码中摘录的
packages\apps\Settings\src\com\android\settings\MasterClearConfirm.java
private Button.OnClickListener mFinalClickListener = new Button.OnClickListener() { public void onClick(View v) {
if (Utils.isMonkeyRunning()) {
return;
} if (mEraseInternal) {
Environment.setDefaultStorageType(Environment.StorageType.EMMC);
try {
Thread.sleep(200);
} catch (Exception exp) {
}
Intent i = new Intent("android.intent.action.MASTER_CLEAR");
i.putExtra("IS_FORMAT", mEraseInternal);
getActivity().sendBroadcast(i);
} else {
/* move format SD card action to method formateSDCard() */
getActivity().sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));
} }
};广播处理是在framework层frameworks\base\services\java\com\android\server\MasterClearReceiver.java至于相关权限在网上可以搜索下
Intent intent = new Intent(ExternalStorageFormatter.FORMAT_AND_FACTORY_RESET);
intent.setComponent(ExternalStorageFormatter.COMPONENT_NAME);
getActivity().startService(intent);
} else {
getActivity().sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));
// Intent handling is asynchronous -- assume it will happen soon.
}
上面代码是什么意思?判断SdCard是否存在?如果存在就Erase?不存在呢?发的广播是干嘛用的?
if (mEraseSdCard)是判断LZ出厂化时,是否勾选了个格式内置sd卡选项。
我不是说了吗 广播处理是在framework层frameworks\base\services\java\com\android\server\MasterClearReceiver.java 至于具体擦除那些东西是由底层驱动做的事情