我正尝试在Android 4.2.2中设置Nexus 4中的飞行模式。 我知道这是不可能的,因为AIRPLANE_MODE_ON被移动到Global system settings,它只是一个读取选项。Jelly Bean中的飞行模式
是否有任何其他方式来做类似的事情,我的意思是禁用收音机?我可以禁用蓝牙,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)
如果我使用我得到的错误Permission is only granted to system apps。我正在检查SDK源(在跟踪文件中)试图找到一种方法来设置没有此权限的飞行模式,但我没有取得任何成功。
2013-04-22
Freefri
+0
你会发现这个问题的答案已经在这个网站!尝试搜索“4.2飞行模式”。基本上,它不再可能将此设置从4.2更改为,除非您的应用程序具有根目录(有解释如何执行此操作的答案)。 –
2013-04-22 23:20:31
+0
感谢您的回答。我实际上并没有在寻找如何改变这个设置(飞行模式),无论如何,我在Stackoverflow中更努力地搜索。我正在寻找如何以不同的方式做类似的事情(如果可能的话)。对于我的应用程序,使用root权限不是一个选项。 –
2013-04-22 23:31:34