android系统,通常按住MENU键开机,会安全模式进入系统。安全模式下,所有的第三方应用服务,不会自动运行,也不会收到广播。如果明确指定第三方的component name 还是可以运行的。
2.1代码位置:
frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java
收索SAFE MODE 这个tag会看到相关代码。
现分析如下:
步骤:在开机动画时,按住MENU键(或者字母S键,方向键的中间键,轨迹球按键中的一个)直到开机,会进入安全模式。
得到log如下:
I/WindowManager( 101): SAFE MODE ENABLED (menu=1 s=-1 dpad=-1 trackball=-1)
现象:在机器左小脚显示“安全模式”。
源码
2.3版本:frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
2291 public boolean detectSafeMode() {
2292 try {
2293 int menuState = mWindowManager.getKeycodeState(KeyEvent.KEYCODE_MENU);
2294 int sState = mWindowManager.getKeycodeState(KeyEvent.KEYCODE_S);
2295 int dpadState = mWindowManager.getDPadKeycodeState(KeyEvent.KEYCODE_DPAD_CENTER);
2296 int trackballState = mWindowManager.getTrackballScancodeState(BTN_MOUSE);
2297 mSafeMode = menuState > 0 || sState > 0 || dpadState > 0 || trackballState > 0;
2298 performHapticFeedbackLw(null, mSafeMode
2299 ? HapticFeedbackConstants.SAFE_MODE_ENABLED
2300 : HapticFeedbackConstants.SAFE_MODE_DISABLED, true);
2301 if (mSafeMode) {
2302 Log.i(TAG, "SAFE MODE ENABLED (menu=" + menuState + " s=" + sState
2303 + " dpad=" + dpadState + " trackball=" + trackballState + ")");
2304 } else {
2305 Log.i(TAG, "SAFE MODE not enabled");
2306 }
2307 return mSafeMode;
2308 } catch (RemoteException e) {
2309 // Doom! (it's also local)
2310 throw new RuntimeException("window manager dead");
2311 }
2312 }
要把safe mode禁止掉,把mSafeMode赋值为false即可。
SystemServer 会在启动过程中,启动所有服务,然后检测是否是安全模式,如果是则通知ActivityManagerService进入安全模式,ActivityManagerService又通知PackageManagerService进入安全模式,然后在左下角显示一个“安全模式”的文字。PackageManagerService进入安全模式,仅仅是设置了mSafeMode这个局部变量。
安全模式对PackageManagerService的影响:
在获得Persistent应用的时候如果是安全模式,则只返回SystemApp。
在解析ContentProvider的时候,如果是安全模式,只有制定的provider是系统自带的才能解析。
总的来说,如果PackageManagerService处于安全模式下,只有ApplicationInfo.FLAG_SYSTEM的组件才会返回。
设置了persistent标志的应用会在ActivityManagerService执行systemReady的时候,由AM来启动。
如果进入了安全模式,即使设置类persistent标志的第三方应用也不会启动。
launcher在加载桌面的时候,会通过AMS来获得判断是否是SafeMode。
安全模式对广播的影响,AMS最终会通过PM来获得广播的接收着,AppGlobals.getPackageManager().queryIntentReceivers
mReceivers.queryIntent()
mReceivers的类型是ActivityIntentResolver
这个类在解析receivers的最后,会调用newResult,这个函数会判断安全模式下,如果不是系统的应用,会排除在外。
按键值参考:
参考:
http://developer.android.com/reference/android/view/KeyEvent.html
分享到:
相关推荐
安全模式修复文件,通过注册表。安全模式修复文件,通过注册表。
safemode.slog
2015Sample Source Code 1D SAFE_半解析有限元_各向异性波_波有限元法_半解析_有限元波_源码.zip
ipad提示“exit safe mode”怎么办.docx
随着嵌入式产品功能的增加,如何让用户对已购买的产品的升级能安全地、顺利地完成,避免升级过程中出现的意外掉电所引起的产品故障,这样的问题要求嵌入产品设计开发者在设计时就将产品的 safe mode 安全模式考虑...
相信很多上网的人,都有过这样的经历: 装了 杀毒软件, 防火墙,但在浏览网页时,还是会经常卡在某个网站上,网页一片空白,成为假死状态,这些8 0%都是恶意网站造成! 安全浏览,完全可以解决这些问题,上网不会再卡,...
android rilj sms safe mode good luck
采用半解析有限元法计算各向异性板中的导波,有理论有代码
通过本文,我们可以了解到针对一个实际的嵌入式系统,设计中需要注意的技术要点和实现细节。
NULL 博文链接:https://buptrock.iteye.com/blog/1279528
随着嵌入式产品功能的增加,如何让用户对已购买的产品的升级能安全地、顺利地完成,避免升级过程中出现的意外掉电所引起的产品故障,这样的问题要求嵌入产品设计开发者在设计时就将产品的 safe mode 安全模式考虑...
跳过所有“安全模式”警告并全屏显示博客 自动跳过所有“可能包含敏感媒体”的Tumblr博客警告-并全屏显示博客(而不是默认的半屏)。 支持语言:English
safe_mode是提供一个基本安全的共享环境。 在一个多用户共享的phpweb服务器上,当这台服务器开启了safe_mode模式,有以下函数将会受到影响。 首先,以下尝试访问文件系统的函数将会被限制,运行服务器的用户id,如果...
手机安全软件功能: 手机防盗: 根据sim的变更, 判断手机是否被盗,根据协议发送手中中sim卡的信息,和当前手机的位置经纬度,给安全号码发送信息, 快速进入手机防盗md5加密。 通讯管理: 来电黑名单,短信黑名单...
用法有关Ruby代码和ERB模板的手动评估,请参见demo.rb 您可以通过注册ActionView模板处理程序来使用它们,例如,在config / initializer文件中,如下所示: # in config/intializer/safemode_tempate_handlers....
一款基于android手机平台的程序,用于对敏感隐私数据的加密保存。
Thread-safe support for multiple trackers Support for custom connection implementations Complete Matomo HTTP API support Custom dimensions Event Tracking Content Tracking Ecommerce Checksum