Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 果冻豆中的飞机模式_Android_Reflection_Android Ndk_Android 4.2 Jelly Bean - Fatal编程技术网

Android 果冻豆中的飞机模式

Android 果冻豆中的飞机模式,android,reflection,android-ndk,android-4.2-jelly-bean,Android,Reflection,Android Ndk,Android 4.2 Jelly Bean,我正在尝试用安卓4.2.2在Nexus4中设置飞行模式。 我知道这是不可能的,因为飞机模式被移动到,它只是一个读取选项 有没有其他方法可以做类似的事情,我是说关掉收音机?我可以禁用蓝牙、wifi和互联网连接,但电话网络仍处于活动状态 可以使用创建一个库来完全禁用网络吗 EDIT:我尝试了java.lang.reflect制作此方法: @SuppressLint("NewApi") @SuppressWarnings("rawtypes") private boolean putStringAir

我正在尝试用安卓4.2.2在Nexus4中设置飞行模式。 我知道这是不可能的,因为飞机模式被移动到,它只是一个读取选项

有没有其他方法可以做类似的事情,我是说关掉收音机?我可以禁用蓝牙、wifi和互联网连接,但电话网络仍处于活动状态

可以使用创建一个库来完全禁用网络吗

EDIT:我尝试了
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(解析器、名称、值)超过
JELLY\u BEAN\u 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)

如果我使用
则会出现错误
权限仅授予系统应用程序
。我正在检查SDK源代码(在跟踪文件中),试图找到一种在没有此权限的情况下设置飞行模式的方法,但没有成功。

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

你有两个选择

  • 使您的应用程序成为
    系统
    应用程序。i、 e.为手机设置根目录,将APK推到
    /system/app
    ,然后从那里安装。这将使您能够切换飞行模式
  • 使用
    Reflection
    获取切换飞行模式的Android系统函数调用

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

    您会发现此问题的答案已经在该网站上!尝试搜索“4.2飞机模式”。基本上,不再可能从4.2更改此设置,除非您的应用程序具有root(也有解释如何执行此操作的答案)。谢谢您的回答。我并不是在寻找如何改变这个设置(飞机模式),反正我在Stackoverflow中搜索得更努力。我正在寻找如何以不同的方式做类似的事情(如果可能的话)。对于我的应用程序,使用根权限不是一个选项。你能给我一些关于如何使用反射来获得Android系统函数调用的参考吗?解释一下。我相信你会找到更多的资源,因为这是一种常用的方法。谢谢你,但我没能让它工作。我已经编辑了问题的答案。看起来你做得不对。您将需要更多地搜索反射是如何应用的。什么系统调用?我还没能通过反思找到我需要的东西来让它工作。