插入壁式充电器时自动启动[关闭]
Posted
技术标签:
【中文标题】插入壁式充电器时自动启动[关闭]【英文标题】:Auto boot when wall charger is plugged [closed] 【发布时间】:2014-12-05 07:38:44 【问题描述】:我正在开发一个 android 应用程序,它需要 3 件事:-
-
让应用程序在特定时间运行,然后手机将关闭(正常工作)
当手机从插座充电时,我希望手机在不按任何电源按钮的情况下自动开机。 (不适用于墙壁插座,但通过笔记本电脑连接到 USB 电缆时工作)。
启动后,我的应用应该会自动开始工作(正常工作)
你必须知道:- 我的手机是 Moto E(已植根)并希望完成第二步。尝试了一些代码,但这不适用于moto E。 当与 USB 连接时,它会给出 2 作为响应,当与壁式插座充电器连接时,它会显示 1
任何帮助将不胜感激
P.S :- 自动启动使用连接笔记本电脑但不使用插座充电器的 USB 电缆工作
Update-1:1- 发现 fastboot oem off-mode-charge 0
在 Nexus 7 上工作,但在 Moto e 上没有。
2- 连接到路由器(USB 加密狗端口)时 Moto e 启动
【问题讨论】:
它是因为如果你把它插到你的笔记本电脑上,它就用它作为数据线,但是墙上的插座不发送任何数据,只有电压 你能提供一些你的java代码吗? @Rohit 你能发布当前使用 USB 电缆的代码吗? 对于USB,它在摩托罗拉E中默认工作 终于找到了解决办法!和平!解脱! 【参考方案1】:我终于找到了解决办法,你可以通过删除system/bin/charge_only_mode
文件来实现。请自行承担风险,并在删除之前备份该文件。我得到了预期的结果,即当它连接到壁式充电器时启动,现在它工作正常。
万事如意!
【讨论】:
我尝试通过在文件编辑器中打开将其从设备拉到我的机器上来编辑该文件。它似乎是一个二进制文件,我不知道如何编辑。能否请您指导我在哪里编辑和编辑什么! 我只是在备份该文件后删除了该文件。没有编辑没有别的。使用 ES 文件资源管理器,然后在 Menu>Tools>Root Explorer (Turned That ON) 中,然后将该文件复制到某处,然后删除该文件。 @Rohit:你知道我们可以在开机阶段(显示电池动画的阶段)关闭背光的命令吗? Lenovo S6000-H 没有“system/bin/charge_only_mode”或“/system/bin/chargemon”或“/system/bin/playlpm”!!!看看这个android.stackexchange.com/questions/131062/…。如何在 S6000 上执行此操作? : 摩托罗拉 Moto E (condor) 上没有此文件:(【参考方案2】:Moto e4 和 Pixel 2 XL:
将您的设备放入引导加载程序 (fastboot) 并从通过 USB 连接到 Android 工具的计算机上运行以下命令:
fastboot oem off-mode-charge 0
【讨论】:
在带有 lineage os 的 nexus 4 上工作。谢谢【参考方案3】:我能够通过更新 init.rc
文件使其工作
我找到了on charger
触发器并在其下方添加了以下几行:
setprop ro.bootmode "normal"
setprop sys.powerctl "reboot"
整个触发器块最终看起来像这样
on charger
class_start charger
setprop ro.bootmode "normal"
setprop sys.powerctl "reboot"
然后您需要重新打包并刷新更新后创建的启动映像。
通过 USB 连接设备
打开设备电源并进入引导加载程序模式
adb reboot bootloader
在 fastboot 中执行以下命令来刷新启动映像
fastboot flash boot new-boot.img
注意:此修复程序会导致设备在插入电源后重新启动,即使使用电源按钮或软件关闭将其关闭也是如此。
来源:https://forum.xda-developers.com/showthread.php?p=77766638#post77766638
您可以在此处查看包含我的项目的这些更改的提交:
https://github.com/darran-kelinske-fivestars/mkbootimg_tools/commit/c8633a2ec2e1924272fd16a8ed7fa7414bb65544#diff-d0007d763b44198f7c22e2c19609d5bbR606
【讨论】:
【参考方案4】:我还尝试用重新启动手机的 sh 脚本替换charge_only_mode,但只有一个带有 M 的红色圆圈(在摩托罗拉 Bionic 上)。将脚本更改为下面的代码就可以正常工作了...现在我看到带有 M 的红色圆圈几秒钟,然后是一个空白屏幕,另一个带有 M 的红色圆圈,然后它启动了。
#!/system/bin/sh
su -c "/system/bin/reboot -n outofcharge"
【讨论】:
【参考方案5】:在我的设备Lenovo K7000-Plus上,需要修改的文件是kpoc_charger
,位于/system/bin
。
Ipod 文件无法在我使用 Android 6.0 ROM 的手机上运行,但 kpoc_charger 可以正常运行。
问候
哈迪
【讨论】:
【参考方案6】:对于联想 A2010 手机,以下工作:
-
使用 Playstore 中的文件管理器手机应用程序,例如 Total Commander(在已获得根的手机上)转到文件夹 /system/bin/
复制文件 kpoc_charger 并将其粘贴为 kpoc_charger.bak
现在使用total-commander编辑原始文件kpoc_charger,将所有行替换为以下代码:
#!/system/bin/sh
/system/bin/reboot
保存它,转到属性并将 UID:0 root、GID:2000 shell 和权限更改为 755(与 /system/bin 文件夹中其他文件的属性相同)。
现在关闭手机并插入充电器。
巴津加!!!!电池图标显示一秒钟,但手机成功启动到操作系统。
【讨论】:
【参考方案7】:当手机从插座充电时,我想让手机开机 自动无需按任何电源按钮。 (不适用于墙壁 插座,但通过笔记本电脑连接到 USB 电缆时工作)。
您只能通过修改手机的操作系统文件来实现此目的。基本上在/system/bin/chargemon
有引导脚本/二进制文件,您可以将其替换为不执行任何操作的脚本。 风险自负,因为这可能会导致设备永久损坏。此外,制造商保修将失效。
【讨论】:
没有像chargemon这样的东西。我有charge_monitor,这个文件是编码的【参考方案8】:我找到了另一种方法(感谢 DavidThompson256 http://forum.xda-developers.com/showthread.php?t=1187631)
首先确保您的手机已植根(我发现 iRoot 对此非常有用),然后在您的手机上安装 RootExplorer.apk(或类似软件)。
尝试编辑“/system/bin/playlpm”并将其内容替换为以下命令:(不要忘记先备份)。
#!/system/bin/sh
/system/bin/reboot
(我知道内容是二进制的,只需删除它们并写下这两行并保存文件)
注意:当您修改该文件时,不会对其权限应用任何更改,但如果您正在制作另一个文件,请记住完全按原样设置权限。
最后,请您自担风险。它对我有用。 (三星发现 S730M)
【讨论】:
【参考方案9】:我认为应该有功率传感器,如果你可以在这段代码中添加它,我相信它会起作用
public class Main extends Activity
private SensorManager mSensorManager;
private PowerManager mPowerManager;
private WindowManager mWindowManager;
private WakeLock mWakeLock;
private Button button;
private TextView textView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
try
// Get an instance of the SensorManager
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
// Get an instance of the PowerManager
mPowerManager = (PowerManager) getSystemService(POWER_SERVICE);
// Get an instance of the WindowManager
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mWindowManager.getDefaultDisplay();
// Create a bright wake lock
mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass()
.getName());
setContentView(R.layout.main);
textView = (TextView)findViewById(R.id.textView1);
button = (Button)findViewById(R.id.button1);
button.setOnClickListener(mButtonStopListener);
catch (Exception e)
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("onCreate", e.getMessage());
// END onCreate
View.OnClickListener mButtonStopListener = new OnClickListener()
public void onClick(View v)
try
mWakeLock.release();
textView.setText("mWakeLock.release()");
catch (Exception e)
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("onPause",e.getMessage());
;
@Override
protected void onResume()
super.onResume();
/*
* when the activity is resumed, we acquire a wake-lock so that the
* screen stays on, since the user will likely not be fiddling with the
* screen or buttons.
*/
try
mWakeLock.acquire();
textView.setText("mWakeLock.acquire()");
catch (Exception e)
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("onResume", e.getMessage());
@Override
protected void onPause()
super.onPause();
// and release our wake-lock
try
mWakeLock.release();
catch (Exception e)
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("onPause",e.getMessage());
【讨论】:
当 OP 声明他打算在使用 USB 电缆启动设备时启动设备时,这将如何工作?简而言之,当设备关闭时,没有应用程序正在运行,因此您的代码甚至不会执行。这种功能是在Android OS启动之前嵌入在bootloader中的。IMO,我们需要修改内核级别的文件才能达到效果。 我终于找到了解决方案,它现在 100% 正常工作。 @Rohit:您能否发布 100% 为您工作的解决方案。我对 root 设备也有同样的要求。 是的,请告诉我们您的解决方案@Rohit。我已经扎根,我能够删除“charge_only_mode”文件,但现在当我插入壁式充电器时,我只看到带有 Moto“M”的红色圆圈,我必须拉电池才能重置。谢谢。 我已经提到了解决方案。请在顶部查看,我的 20 台 Moto E 设备使用相同的东西。【参考方案10】:所以我试图用第三代 Moto G 来实现这一点。根据 Rohit 的回答,它有一个 charge_only_mode 文件,但只是移动/重命名它并没有让手机在充电时重启。相反,它只是坐在那里,带有摩托罗拉的标志。将charge_only_mode 替换为此处引用的任一脚本时,我得到了相同的结果。
不过,我确实让它工作了。我将 /system/bin/reboot 复制到 /system/bin/charge_only_mode 中,就成功了。
【讨论】:
以上是关于插入壁式充电器时自动启动[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
centos7将u盘作系统盘插入u口,启动后U盘名为sda,一会儿,u盘名称自动变成sdb。最后 filesystem被关闭了