如何使用root在Android 4.2及以上版本上切换飞行模式?

9
众所周知,在Android 4.2上只有系统应用程序可以切换飞行模式,但我认为对于已root的设备来说,这一功能必须是可用的。我想在我的应用程序中实现此功能,要求设备的Build.VERSION.SDK_INT>=17。 如何在已root的Android 4.2设备上切换飞行模式?

相关(但不一定是重复的):https://dev59.com/ZmYr5IYBdhLWcg3wVYsg?lq=1 - John Carter
是的,这个问题不是重复的。 - BArtWell
1个回答

13
在Android 4.2中,出现了一个新的名为“设置(settings)”的二进制文件。您也可以在不使用su的情况下使用它,此时您的应用程序需要在其清单文件中声明更改此设置所需的权限(对于4.2中的飞行模式,这将是“WRITE_SECURE_SETTINGS”,该权限仅授予安装在系统分区上的应用程序)。
激活。
su 
settings put global airplane_mode_on 1
am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true

停用

su
settings put global airplane_mode_on 0
am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false

对于其他 Android 版本和其他设置(在4.2之前可以在没有 root 的情况下激活飞行模式),您可以在 settings.db 中使用 SQL 注入。

su
sqlite3 /data/data/com.android.providers.settings/databases/settings.db
insert into global values(null, 'airplane_mode_on', 1);

将“全局”替换为“系统”或“安全”,将“airplane_mode_on”替换为所需表条目的键。对于某些设置,您需要发送特定的广播,请参见上面飞行模式的示例。

要浏览您的settings.db,请在终端应用程序中运行此命令:

su
sqlite3 /data/data/com.android.providers.settings/databases/settings.db
.tables
select * from global
select * from secure
select * from system

我并不完全清楚这个……这是不是意味着在未经 Root 的情况下,无法通过 API 合法地切换 >= 4.2 的飞行模式? - Marius
是的,这也是原始问题所说的。(您的应用程序如果没有根权限或自己开发/编译固件,则无法成为系统应用程序)。 - joe1806772

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接