gpt4 book ai didi

android - Jelly Bean 中的飞行模式

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:54:54 25 4
gpt4 key购买 nike

我正在尝试在装有 Android 4.2.2 的 Nexus 4 中设置飞行模式。我知道这是不可能的,因为 AIRPLANE_MODE_ON 已移至 Global system settings它只是一个阅读选项。

有没有其他方法可以做类似的事情,我的意思是禁用 radio ?我可以禁用蓝牙、wifi 和互联网连接,但电话网络仍然有效。

可以用 NDK 创建一个库完全禁用网络?

编辑:我试过 java.lang.reflect制作此方法:

@SuppressLint("NewApi")
@SuppressWarnings("rawtypes")
private boolean putStringAirplaneMode() throws ClassNotFoundException,
NoSuchMethodException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException {

ContentResolver resolver = context.getContentResolver();
String name = Settings.Global.AIRPLANE_MODE_ON;
String value = (isEnabled() ? "1" : "0");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
Log.v("AirplaneBatterySaver",
"Using reflection to change airplane mode");
// For JELLY_BEAN_MR1 use reflection. TODO test if works reflection
Class SystemProperties = android.provider.Settings.Global.class;

Class[] parameterTypes = new Class[3];
parameterTypes[0] = ContentResolver.class;
parameterTypes[1] = String.class;
parameterTypes[2] = String.class;

@SuppressWarnings("unchecked")
Method method = SystemProperties.getMethod("putString",
parameterTypes);

method.setAccessible(true);
return (Boolean) method.invoke(new Object(), resolver, name, value);
// return Settings.Global.putString(resolver, name, value);

} else {
Log.v("AirplaneBatterySaver",
"Using Settings.System to change airplane mode");
return Settings.System.putString(resolver, name, value);
}
}

如您所见,我替换了方法 Settings.System.putString(resolver, name, value);JELLY_BEAN_MR1但是,当然,我得到一个 SecurityException因为我的应用不是系统应用。这是痕迹:

Caused by: java.lang.SecurityException: Permission denial: writing to secure 
settings requires android.permission.WRITE_SECURE_SETTINGS
at android.os.Parcel.readException(Parcel.java:1425)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
at android.content.ContentProviderProxy.call(ContentProviderNative.java:574)
at android.provider.Settings$NameValueCache.putStringForUser(Settings.java:777)
at android.provider.Settings$Global.putStringForUser(Settings.java:5421)
at android.provider.Settings$Global.putString(Settings.java:5411)

如果我使用 <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>我收到错误 Permission is only granted to system apps .我正在检查 SDK 源代码(在跟踪文件中)以尝试找到一种无需此权限即可设置飞行模式的方法,但我没有取得任何成功。

最佳答案

从 4.2.2 开始,您无法切换飞行模式,因为它是只读的。

您有两个选择。

  1. 使您的应用程序成为系统 应用程序。即根手机,将您的 APK 推送到 /system/app 并从那里安装。这将使您能够切换飞行模式。
  2. 使用 Reflection 获取切换飞行模式的 Android 系统函数调用。

您应该获得有关如何使用反射获取公开 API 的代码示例,否则不会通过 SDK 向开发人员公开。

关于android - Jelly Bean 中的飞行模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16158265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com