飞行模式后停用PIN请求


10

开机时,默认情况下会要求您输入SIM-PIN,这是一种很好的安全措施,可防止“陌生人”造成您的费用。现在,从飞行模式返回时同样适用:必须再次输入SIM-PIN。这使某些节能器变得毫无用处:如果某个应用程序例如因信号丢失而进入飞行模式(请参阅:什么是电池待机以及如何避免耗尽电池电量?),如果没有用户交互,它将无法恢复正常运行。

我正在寻找一种有选择地禁用此功能的方法:开启设备电源时激活PIN请求-但从飞行模式返回时不要求输入SIM-PIN。

请不要与“键盘锁”混淆:我不要求有关屏幕锁定(PIN /模式/密码)。在这里,我知道自己的出路,因为有可供应用程序使用的API(因此,例如,可以使用Tasker暂时将其关闭)。

我知道这适用于三星设备-但我最好希望有一种适用于所有制造商的设备独立解决方案。


2
真!让我从上述问题中引述一下:我正在寻找一种有选择地禁用此功能的方法 -而不是完全禁用该检查。我知道可以完全禁用它(这是我当前使用的功能),但是我只想禁用它才能从飞行模式切换回去,而不能用于设备启动。
伊齐

Answers:


1

免责声明

  1. 这需要根。没办法解决。
  2. 您的设备必须运行Android 4.1+
  3. 对于某些用户,此解决方法可能太高级了。仅在知道自己在做什么时才尝试应用它。
  4. 如果在此过程中出现问题或Ragnarök开始运行,我概不负责。您自行承担风险。请谨慎操作。
  5. 我不是所提及的任何mod的作者或与之无关。我只是找到了这个,为了您的利益我在分享。

解决方法

我找到了解决该问题的方法,该方法在安装了Cyanogenmod 10.2和Dorimanx内核9.41的Samsung Galaxy S2上运行良好。必要步骤如下:

  1. 确保设备已植根。

  2. 下载并安装Xposed Framework Installer

  3. 当Xposed在不久的将来要求在任何地方提供根目录时,请授予它

  4. 打开应用程序,然后单击Framework-Tab。

  5. 点击Install/Update

  6. 重新启动

  7. 下载并安装Jelly Bean 4.x Airplane Mode Helper

  8. Xposed Framework Installer再次打开-App,然后选择Modules

  9. 勾选(设置为活动)Jelly Bean 4.x Airplane Mode Helper

  10. 重新启动

  11. 打开Jelly Bean 4.x Airplane Mode Helper

  12. 勾选(启用启用

  13. 重新启动

而已!飞行模式应该在以前的Android版本再次合作,也不会被关闭时SIM-PIN问下去了。不过,它仍然在启动时起作用,因此可以使您的SIM卡保持一定的安全性。我使用Llama位置配置文件设置了一个自动节电程序,类似于此处所述(Thx一堆,Izzy),它可以正常工作。

祝大家好运!


1
非常感谢您的回答!我刚刚对其进行了编辑以改善格式(列表),并添加了它需要JB +的事实。由于我的设备尚未运行JB,因此我无法对其进行测试-但我怀疑您可能错过了问题中最重要的部分(至少您没有提到它):从飞机返回时,它是否要求提供SIM-PIN模式-还是可以这样跳过?
伊齐

1
放心吧,我完全得到了你的问题,我的回答是正是你一直在寻找的东西;) -它并没有从飞行模式返回时索要SIM-PIN,但在启动它仍然如此。因此,可以保持您的安全性,但是省电脚本可以再次运行。感谢格式升级!
FuzzyQ

正确的话,我添加了最重要的信息-我完全忘了提到这一事实,实际上确实消除了在飞行模式下再次解锁SIM卡的需要。
FuzzyQ

1
在这种情况下,这正是我所追求的:自动化作业无需人工干预即可工作,但是在进行“初始化”(即启动后)时,该设备仍然受到保护。优秀的!我现在投票。由于我也不能测试t0mm13b的解决方案,因此我不得不就我的“接受”向您信任:这似乎是迄今为止最有前途的(也是免费的!)解决方案,尽管仅限于JB +。
伊齐

你知道,我首先到达那里很有趣。我找到了您有关电池待机问题的问题和答案,并很快遇到了飞行模式-SIM-PIN问题。由于我已经使用Xposed Framework已有一段时间了,所以我想到了寻找可以解决该问题的xposed模块的想法。:)
FuzzyQ

8

答案在于源……似乎是请求锁定的属性内置于build.prop或中default.prop

看看在TelephonyManager 源中找到的参考,在第735和755行之间。为简便起见,

public int getSimState() {
        String prop = SystemProperties.get(TelephonyProperties.PROPERTY_SIM_STATE);
        if ("ABSENT".equals(prop)) {
            return SIM_STATE_ABSENT;
        }
        else if ("PIN_REQUIRED".equals(prop)) {
            return SIM_STATE_PIN_REQUIRED;
        }
        else if ("PUK_REQUIRED".equals(prop)) {
            return SIM_STATE_PUK_REQUIRED;
        }
        else if ("NETWORK_LOCKED".equals(prop)) {
            return SIM_STATE_NETWORK_LOCKED;
        }
        else if ("READY".equals(prop)) {
            return SIM_STATE_READY;
        }
        else {
            return SIM_STATE_UNKNOWN;
        }
    }

关键是在94和98行之间的其他TelephonyProperties.PROPERTY_SIM_STATE位置引用的。

//****** SIM Card
/**
 * One of <code>"UNKNOWN"</code> <code>"ABSENT"</code> <code>"PIN_REQUIRED"</code>
 * <code>"PUK_REQUIRED"</code> <code>"NETWORK_LOCKED"</code> or <code>"READY"</code>
 */
static String PROPERTY_SIM_STATE = "gsm.sim.state";

在我的机器上搜索了源代码之后,我将为您提供getSimState调用此方法的频率的想法,注意一下Java源代码的名称,以了解如何将其集成到Android中,而不仅仅是在Telephony层中,别处。

services/java/com/android/server/am/BatteryStatsService.java 219:      int simState = TelephonyManager.getDefault().getSimState();

telephony/java/android/telephony/TelephonyManager.java 523:    public int getSimState() { 551:     * @see #getSimState 562:     * @see getSimState

policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java 478:    public IccCard.State getSimState() {

policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java 545:            final IccCard.State state = mUpdateMonitor.getSimState();

policy/src/com/android/internal/policy/impl/LockPatternKeyguardViewProperties.java 57:        final IccCard.State simState = mUpdateMonitor.getSimState();

policy/src/com/android/internal/policy/impl/LockScreen.java 273:       mStatus = getCurrentStatus(updateMonitor.getSimState());

policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java 173:                && (mUpdateMonitor.getSimState() == IccCard.State.ABSENT); 217:                final IccCard.State simState = mUpdateMonitor.getSimState(); 469:                && (mUpdateMonitor.getSimState() != IccCard.State.PUK_REQUIRED)) { 512:   secure = mUpdateMonitor.getSimState() == IccCard.State.PIN_REQUIRED 513:                            || mUpdateMonitor.getSimState() == IccCard.State.PUK_REQUIRED; 643:        final IccCard.State simState = mUpdateMonitor.getSimState(); 662:        final IccCard.State simState
= mUpdateMonitor.getSimState();

policy/tests/src/com/android/internal/policy/impl/LockPatternKeyguardViewTest.java 49:        public IccCard.State getSimState() {

在锁定屏幕上,这些文件名是否有提示?

理论

这需要根在这一点上,通过调用adb shell和调用getprop,并setprop要做到这一点,只有一部分是这样的,通过调用

adb shell getprop 将会取回相关信息,如下所示

sh-4.1# getprop
[gsm.sim.state]: [READY]

从上电之时起,这种微妙的属性似乎就动态地保留在了后备属性存储中,并且根据事物,服务的数量进行了相应的调整,更不用说意外掉下手机了,这可能会使SIM卡退出它的读卡器会将卡的状态更改为“ 未就绪 ”或“ 未知 ”。(ref: system / core / include / cutils / properties.hsystem / core / toolbox / [ getprop | setprop ] .c)

现在,从理论上讲,此时,在锁定屏幕之前调用setprop可以暂时绕开它,但是话又可以通过电话层将其重置!还没有尝试过!这导致了...

结论

可以关闭此功能的唯一方法是有效禁用实际sim卡上的密码锁定请求。那是存储“魔术”位标志的地方,电话的RIL层通过专有的htc / samsung / qualcomm的库将其读入,这将阻止扩展“ PIN_REQUIRED”属性的持久性Android的各层。

可能的解决方法,仅适用于Android开发人员:)

这将需要破解并重新编译源代码。 对于飞行模式,进入该模式并离开飞行模式时,可以将属性拆分为两个,可以按原样保留gsm.sim.state,但可以设计另一个属性,例如gsm.sim.state。 aircraft.mode并沿的方向分配一个值SIM_STATE_PIN_NOT_REQUIRED,然后修改飞行器模式检查以读取该属性,如果设置为该属性,则不显示“销钉”对话框,否则通常会提示该对话框。


感谢您的详细说明,t0mm13b!因此,我们必须假设三星和LG在您提到的所有地方都更改了代码-如果我得到的有关三星和LG设备的报告(人们说他们可以分别禁用SIM PIN检查,如我的问题所述),正确?
伊齐

再次感谢!如果您能确定要在CM中找到该设置,并且由于它位于其中,那么这已经是一个很大的帮助-因为CM适用于许多设备:)我的设备都运行CM 7.x,所以我可以验证-尽管我还没有遇到这样的设置(这就是为什么我要问看哪里的地方;)
Izzy

尝试设置>位置和安全设置,Sim卡锁定?
t0mm13b 2012年

我不得不删除它在AOSP消息源中的同样可以回答您问题的评论(这是我第一次看到它,因为我的sim卡已经被解锁并且始终没有密码请求锁定)
t0mm13b

1
未确认使用姜饼(在我的MotorolaDroid²/Milestone²上为CM7.2)。没错,SIM PIN可以在上述位置进行配置-但只能打开/关闭,而不能选择“仅在开机时”。抱歉。
伊齐

3

我不确定您是否需要做您想做的事情。

您可能会改为:

  • 设置两个Tasker任务以打开/关闭启用/禁用Airplane模式所做的所有操作。
  • 切勿实际使用您的Airplane模式。使用您的Tasker任务。

您可能必须查看是否启用了任何应用程序以自动打开硬件无线电。观察是否有应用尝试进行后台同步或其他操作,他们可能会尝试打开禁用的无线电。如果是这样,请禁用该应用程序自动打开您的WiFi等功能。我之所以这样说是因为Airplane,如果您尝试使用此答案,则模式肯定会在之前但之前不再停止意外的WiFi连接。

您还可以设置TaskerAirplane在关机时始终进入模式。这样,您将在引导时看到PIN锁。


谢谢您,zero2cx-但是我不是一个人问我,也不是特别要求Tasker(我知道我可以在此处单独禁用某些功能;但是,单独禁用蜂窝无线电不适用于我的Milestone²)。在链接的问题答案中,我还提到了另外两个应用程序。据报道,由于他们使用飞行模式,因此要求输入或禁用PIN码。因此,请理解,我不需要特定的Tasker解决方案(许多人认为Tasker太复杂了),而是通用的解决方案来满足我的要求:仅在从飞机模式返回时禁用PIN请求。
伊齐

好的。那我很困惑 必须有一种通过软件切换它的方法,但是要采用更加细微的方式。三星如何让您做到这一点?
zero2cx 2012年

我不知道(没有三星设备)。但是我有报道说它在许多(所有?)三星设备以及LG上都是可行的。在我的Milestone²上,我没有明确检查,因为之前我的当前SIM卡在HTC Buzz / Wildfire中,因此我必须完全禁用SIM-PIN。
伊齐
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.