天道酬勤,学无止境

How Do I Disable AIRPLANE MODE tablet supports 4.4.2

I have to disable AIRPLANE MODE and DATE TIME SETTINGS in my app, for that i used these intent filters but none of them works for me

        <uses-permission android:name="android.permission.WRITE_SETTINGS" />

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
           <action android:name="android.settings.AIRPLANE_MODE_SETTINGS" />
           <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

        <intent-filter>
           <action android:name="android.settings.DATE_SETTINGS" />
           <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

But earlier i successfully disabled Settings by using below intent-filter

        <intent-filter >
            <action android:name="android.settings.SETTINGS" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

评论

As for version 4.2 and up you are not able to control the Airplane mode programmatically.

You are able to do so only if the user has a rooted device.

As written in the API DOC:

"Some device settings defined by Settings.System are now read-only. If your app attempts to write changes to settings defined in Settings.System that have moved to Settings.Global, the write operation will silently fail when running on Android 4.2 and higher. Even if your value for android:targetSdkVersion and android:minSdkVersion is lower than 17, your app is not able to modify the settings that have moved to Settings.Global when running on Android 4.2 and higher."

TLDR: Don't do that.

Think what happens if user couldn't enable airplane mode though if they want/should.
Important system settings cannot allowed to change from your app.

I recommend:

  1. Check airplane mode is disabled or not
  2. If enabled, prompt "this app is not work on airplane mode. open system settings app?" with "yes/cancel" dialog
  3. Close your app and/or open system settings app

EDIT: it looks like this:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void checkAirplaneMode() {
    int mode;
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        Log.v(TAG, "work with new api.");
        mode = Settings.Global.getInt(getActivity().getContentResolver(),
                Settings.Global.AIRPLANE_MODE_ON, 0);
    } else {
        Log.v(TAG, "work with old api.");
        mode = Settings.System.getInt(getActivity().getContentResolver(),
                Settings.System.AIRPLANE_MODE_ON, 0);
    }
    Log.v(TAG, "airplane mode: " + mode);

    if(mode == 1 /* airplane mode is on */) {
        new AlertDialog.Builder(getActivity()).setTitle("Sorry!")
                .setMessage("This app doesn't work with Airplane mode.\n"
                        + "Please disable Airplane mode.\n")
                .setPositiveButton("Open Settings", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        startActivity(new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS));
                        getActivity().finish();
                    }
                })
                .setNegativeButton("Close app", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        getActivity().finish();
                    }
                })
                .show();
    }
}

here's some point.

  • Check Build.VERSION.SDK_INT to use Settings.Global for newer devices. Airplane mode is moved to here.
  • If mode == 1, device is in airplane mode.
  • Open airplane mode setting Activity by
    startActivity(new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS));

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何在新的Android版本(甚至root用户)上打开/关闭飞行模式?(How to turn on/off airplane mode, even on new Android versions (and even with root)?)
    问题 从Android 4.2开始,使用常规API不支持打开/关闭飞行模式。 授予WRITE_SECURE_SETTINGS权限后,它应该应该可以工作,但这仅适用于系统应用程序(如我所读)。 要在具有root用户权限的设备上执行此操作,应该怎么做? 系统应用程序是否还需要root用户才能切换飞行模式? 回答1 要在以Android为基础的设备(手机,平板电脑,笔记本)上打开和关闭飞行/飞行模式,您可以执行以下操作: private final String COMMAND_FLIGHT_MODE_1 = "settings put global airplane_mode_on"; private final String COMMAND_FLIGHT_MODE_2 = "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state"; @SuppressLint("NewApi") @SuppressWarnings("deprecation") public void setFlightMode(Context context) { if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) { // API 17 onwards. if
  • 确定设备是智能手机还是平板电脑? [复制](Determine if the device is a smartphone or tablet? [duplicate])
    问题 这个问题已经在这里有了答案: 平板电脑或手机-Android (30个答案) 6年前关闭。 我想获取有关设备的信息,以查看它是智能手机还是平板电脑。 我该怎么做? 我想根据设备类型显示与资源不同的网页: String s="Debug-infos:"; s += "\n OS Version: " + System.getProperty("os.version") + "(" + android.os.Build.VERSION.INCREMENTAL + ")"; s += "\n OS API Level: " + android.os.Build.VERSION.SDK; s += "\n Device: " + android.os.Build.DEVICE; s += "\n Model (and Product): " + android.os.Build.MODEL + " ("+ android.os.Build.PRODUCT + ")"; 但是,对于我来说,这似乎毫无用处。 此解决方案现在对我有效: DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int width = metrics
  • Works on Bionic 4.1.2 but not on Samsung 4.4.2
    I have an app that I'm working on that uses openGL ES 2.0 on an android device. The app contains some buttons that are displayed using programmatic layout controls. This button pad is superimposed on an OpenGL Surface View. When I run the app on the tablet the buttons appear AND the Surface View appears briefly, but then the Surface View is grey, the color of the background for the 3d model I've created. The app works on a Motorola Bionic, Android 4.1.2, but doesn't work on a Samsung Galaxy Tab/Pro, Android 4.4.2! Of course I would like it to work on both. I googled a solution that involves
  • 适用于 Bionic 4.1.2 但不适用于三星 4.4.2(Works on Bionic 4.1.2 but not on Samsung 4.4.2)
    问题 我有一个正在开发的应用程序,它在 android 设备上使用 openGL ES 2.0。 该应用程序包含一些使用编程布局控件显示的按钮。 此按钮板叠加在 OpenGL 表面视图上。 当我在平板电脑上运行应用程序时,按钮出现并且表面视图短暂出现,但表面视图是灰色的,这是我创建的 3d 模型的背景颜色。 该应用程序适用于摩托罗拉仿生、Android 4.1.2,但不适用于三星 Galaxy Tab/Pro、Android 4.4.2! 当然,我希望它同时适用于两者。 我在谷歌上搜索了一个解决方案,该解决方案涉及更改您实例化 GL 表面视图的初始活动的哪一部分,但我现在无法在线找到该解决方案。 它可能已被删除。 我不知道。 这是我现在看到的错误。 W/ApplicationPackageManager﹕ getCSCPackageItemText() E/MoreInfoHPW_ViewGroup﹕ Parent view is not a TextView 下面是三星设备的日志。 10-10 14:27:03.723 30456-30462/org.android.airplane D/dalvikvm﹕ Debugger has detached; object registry had 1 entries 10-10 14:38:55.833 1269-1269/org
  • 通过ADB开启飞行模式(Turning airplane mode on via ADB)
    问题 我四处张望,但没有找到这个问题的具体答案。 我希望找到一种方法来从ADB切换飞行模式,而该模式完全不涉及GUI。 我已经找到并使用了调用菜单,然后使用keyevents打开飞行模式的方法,但是由于需要考虑UI布局的可能变化,因此该方法只是一个临时解决方案。 我开始认为没有办法仅通过意图打开或关闭飞行模式,但是如果您有任何信息,我将不胜感激。 回答1 首先,我绝不会像大多数答案中所建议的那样,盲目浏览UI的解决方案。 在下面的注释中有更多信息。 我喜欢G murali的第一个答案,该答案提出以下启用飞行模式的建议: adb shell settings put global airplane_mode_on 1 不幸的是,它不起作用。 它只是更改飞行模式图标的状态,但所有无线电仍处于活动状态。 它缺少一个非常重要的部分,该部分在更改设置后立即广播意图,以通知应用程序飞行模式状态已更改。 要启用飞行模式,请使用以下命令: adb shell settings put global airplane_mode_on 1 adb shell am broadcast -a android.intent.action.AIRPLANE_MODE 要禁用飞行模式,您必须将设置更改为0并再次广播意图: adb shell settings put global airplane_mode
  • 如何在Android 4.2上以编程方式启用和禁用飞行模式?(How to programmatically enable and disable Flight mode on Android 4.2?)
    问题 有没有办法在Android 4.2上禁用或启用飞行模式? 我使用的代码仅适用于以前的Android版本: android.provider.Settings.System.putInt( c.getContentResolver(), android.provider.Settings.System.AIRPLANE_MODE_ON, enable ? 0 : 1 ); 回答1 在有根设备上存在一个简单的解决方法。 要启用飞行模式,可以使用以下root shell命令: settings put global airplane_mode_on 1 am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true 要禁用飞行模式,可以使用以下root shell命令: settings put global airplane_mode_on 0 am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false 从这里获取的信息 免责声明:此信息按“原样”提供,不提供任何形式的保证。 回答2 除通过固件签名密钥签名的应用程序或已安装在系统分区上的应用程序(通常由具有root权限的设备用户)外,这不再可能。 回答3 如官方Android 4
  • 通过 UIAutomator 快速设置(Quick Setting through UIAutomator)
    问题 我正在尝试通过 uiautomator 访问“快速设置”中的一项。 我可以通过 device.openQuickSettings(); 打开快速设置; 在此之后,我无法访问特定项目,例如 WiFi/飞行模式。 有人可以帮我在这个快速设置中选择一个项目吗? 我尝试了以下 if (new UiObject(new UiSelector().text("BRIGHTNESS")).exists()) { new UiObject(new UiSelector().text("BRIGHTNESS")).click(); } 和 if (new UiObject(new uiSelector().className("android.widget.GridView").description("AEROPLANE MODE")).exists()) { new UiObject(new UiSelector().className("android.widget.GridView").description("AEROPLANE MODE")).click(); } 但是没有成功.. 谢谢 我将使用以下方法访问项目 UiScrollable scroll = new UiScrollable(new UiSelector().scrollable(true)); UiObject
  • 在Android中切换飞行模式(Toggle airplane mode in Android)
    问题 我做错了吗? 没用 public void airplane() { boolean isEnabled = Settings.System.getInt(this.getApplicationContext().getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1; Settings.System.putInt(context.getContentResolver(),Settings.System.AIRPLANE_MODE_ON,isEnabled ? 0 : 1); //Settings.System.putInt(this.getApplicationContext().getContentResolver(),Settings.System.AIRPLANE_MODE_ON,isEnabled ? 0 : 1); Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); } 回答1 此答案包含执行此操作所需的代码。 另外,请确保您具有WRITE_SETTINGS权限。 改编自控制飞行模式: // read the airplane mode setting boolean isEnabled = Settings
  • 如何调用“关闭飞行模式”通知(How to invoke “Turn Off Airplane Mode” notification)
    问题 在许多应用程序中,例如“邮件”应用程序,如果设备处于飞行模式,则会弹出一条通知,提示“关闭飞行模式或使用Wi-Fi来访问数据”。 我以为如果我的应用尝试访问互联网,它将自动被调用,但事实并非如此。 是否有一种特殊的方法来执行此操作,或者如果没有,我如何检查设备是否处于飞行模式并提供指向“设置”的链接以将其禁用? 回答1 如果将UIRequiresPersistentWifi密钥添加到Info.plist并将其设置为YES ,那么如果您处于飞行模式,则在启动时会看到标准的“关闭飞行模式...”弹出窗口。 回答2 我在我的应用程序中进行测试。 我发现它变了。 “ UIRequiresPersistentWifi” =>“应用程序使用Wi-Fi”。 希望对您有所帮助。 回答3 您可以在应用启动时使用苹果的可达性框架来检查网络连接。 看一下这个 http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html 我有一个可到达的API的包装器类,以使其更易于使用。 (ASIHTTPRequest也有一个)。 https://github.com/daltoniam/GPHTTPRequest 请参阅GPReachablity类以检查连接性。 就对话框提示而¨
  • How to invoke “Turn Off Airplane Mode” notification
    In many applications, such as the Mail app, if the device is in airplane mode a notification will pop up that says "Turn Off Airplane Mode or Use Wi-Fi to Access Data." I thought that this would automatically be invoked if my app tries to access the internet, but it is not. Is there a special method to do this, or if not how can I check if the device is in airplane mode and provide a link to Settings to disable it?
  • 无法启动托管网络(Can't start hostednetwork)
    问题 当我尝试运行netsh wlan start hostednetwork ,收到以下消息: C:\Windows\system32>netsh wlan start hostednetwork The hosted network couldn't be started. The group or resource is not in the correct state to perform the requested operation. 我正在使用管理员权限运行它,所以这不是臭名昭著的 C:\Users\Kevin>netsh wlan start hostednetwork You must run this command from a command prompt with administrator privilege. 如何使托管网络“处于正确状态”? 回答1 通过控制面板->网络适配器->虚拟连接上的右键单击按钮->禁用后,会发生这种情况 要解决此问题,请转到设备管理器(在Windows 8上为Windows键+ x + m,在Windows 10上为Windows键+ x然后m ),然后打开网络适配器树,右键单击Microsoft Hosted Network Virtual Adapter上的按钮,然后单击使能够。 现在尝试使用命令netsh wlan
  • Enable Airplane Mode on all API levels programmatically Android
    how to Enable/Disable Airplane Mode programmatically on onClick of a button? i have tried this // read the airplane mode setting boolean isEnabled = Settings.System.getInt( getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1; // toggle airplane mode Settings.System.putInt( getContentResolver(), Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1); // Post an intent to reload Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); intent.putExtra("state", !isEnabled); sendBroadcast(intent); but i get error "System cannot be resolved or is not a field" because it requires
  • iPhone:如何从我的应用程序在 iphone 中设置飞行模式和自动锁定设置(iPhone:How to set AIRPLANE MODE and AUTOLOCK settings in iphone from my app)
    问题 我想从我的应用程序设置飞行模式和自动锁定设置。 最初我想从 iphone 设置中获取它。 如图所示,我想说的是,如果我从我的应用程序中更改 AIRPLANE MODE 和 AUTOLOCK 设置,则应该在 iPhone 设置中进行更改。 为此,我必须参考任何代码或链接? 回答1 你不能。 我明白 jrturton 想说什么 - 是的,您可以在应用程序运行时暂时禁用自动锁定,但您无法从应用程序更改这些系统设置。 回答2 “自动锁定”可以由UIApplication的idleTimerDisabled属性控制: [UIApplication sharedApplication].idleTimerDisabled = YES; 请注意,正如 Steve 指出的那样,这不会更改手机设置,它只是防止手机在您的应用程序运行时进入睡眠状态。 您无法在应用内设置飞行模式。 回答3 我不确定是否可以从设置中读取此内容。 但出于安全原因,您不能从您的应用程序设置此值
  • 在Android 4.2(及更高版本)上修改AIRPLANE_MODE_ON(Modify AIRPLANE_MODE_ON on Android 4.2 (and above))
    问题 从sdk 4.2版开始,由于Google已将此设置更改为只读的Settings.Global,因此似乎无法再在设备上修改飞行模式。 没有人能够绕开它而没有生根吗? 我的应用程序的主要功能是在屏幕关闭时启用飞行模式,此功能自4.2起停止工作。 只想仔细检查一下我的评估是否正确,并且从android 4.2及更高版本开始我的应用就死了。 参考:http://developer.android.com/reference/android/provider/Settings.Global.html#AIRPLANE_MODE_ON 回答1 我知道您明确要求不生根的解决方案,但是如果您拥有已生根的设备,则至少有(某种)官方解决方案可以将您的应用程序移动到文件夹/system/app 。 然后可以写入Settings.Global : Settings.Global.putInt(context.getContentResolver(), Global.AIRPLANE_MODE_ON, mode ? 1 : 0); 在此处查看如何在4.2中切换飞行模式,以及如何将您的应用移动到/system/app 。 我将其用于切换小部件的迷你状态(源代码链接)。 回答2 只想仔细检查一下我的评估是否正确,并且从android 4.2及更高版本开始我的应用就死了。 是的。 或者,换句话说
  • How can I disable Tablet Mode programmatically?
    I have a Surface Pro that I use for sketching with my stylus. I want to be able to quickly enable/disable tablet mode without going into Device Manager. I've been searching for ways to do this: by disabling drivers, disabling by HID but everything I've found seems overly complicated for what I need. I'm creating just a form with a CheckBox. What's the simplest way to achieve this?
  • 以编程方式禁用移动网络(Disable mobile network programmatically)
    问题 我正在开发一个应用程序,用户可以在其中通过单击按钮启用/禁用移动网络。 我在谷歌上搜索过这个,但我只得到了飞行模式的解决方案。 在飞行模式下,WI-FI 和蓝牙也被禁用。 我不希望它们通过使用飞行模式概念来禁用。 我只想禁用移动网络。 以编程方式实现它的可能方法是什么? 回答1 移动数据是全局设置(以前称为安全设置)。 根据文档 全局系统设置,包含始终适用于所有定义用户的首选项。 应用程序可以读取这些但不允许写入; 与“安全”设置一样,这些是用户必须通过系统 UI 或这些值的专用 API 显式修改的首选项。 不允许应用程序在没有用户直接参与的情况下更改此设置的原因是为了保护用户免于在恶意应用程序“决定”在漫游时打开移动数据或为没有数据固定费率的用户支付意外账单。 任何允许更改此设置的现有解决方案都使用反射并利用 Android 系统中可能仍然存在于某些手机上的安全漏洞。 无论如何,Android 团队对此类漏洞非常重视,他们会在发现后立即修复安全问题。 因此,任何今天有效的解决方案明天都将停止工作。 我不会依赖他们。 如果您想帮助用户更快地从您的应用程序中切换移动数据,您应该弹出一个系统设置对话框,用户可以在其中自行打开或关闭移动数据。 在 Android 4.0 及更高版本中,您可以执行以下操作。 Intent intent = new Intent(); intent
  • 以编程方式在Android的所有API级别上启用飞行模式(Enable Airplane Mode on all API levels programmatically Android)
    问题 如何通过单击按钮以编程方式启用/禁用飞行模式? 我已经试过了 // read the airplane mode setting boolean isEnabled = Settings.System.getInt( getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1; // toggle airplane mode Settings.System.putInt( getContentResolver(), Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1); // Post an intent to reload Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); intent.putExtra("state", !isEnabled); sendBroadcast(intent); 但出现错误“系统无法解析或不是字段”,因为它需要API 16或更高版本 <uses-permission android:name="android.permission.WRITE_SETTINGS"/> 有什么工作方式可以在所有api级别上使用吗? 回答1 public class
  • 通过代码在 Windows 10 上启用平板电脑模式?(Enable Tablet Mode on Windows 10 through Code?)
    问题 我已经阅读了有关如何检测 Windows 10 设备是否处于平板电脑模式的各种方法,最值得注意的是下面的主题; 如何在 Windows 窗体应用程序中检测 Window 10 何时进入平板电脑模式? 我想通过代码(.Net C#)启用/禁用平板电脑模式,但我找不到任何资源来实现这一点。 我已经尝试更改注册表项并发送 HWND_BROADCAST 已发生更改,但这不会启动对平板电脑模式的更改。 我也试过使用 Spy++ 风格的应用程序,但看不到正在发送的消息。 是否存在执行此操作的方法? 回答1 在 C# 中没有真正的方法可以做到这一点。 当然,您可以更改注册表项,但您需要注销/登录才能更改或更改为平板电脑模式。 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ImmersiveShell\TabletMode 启用:1 或禁用 0 由于我有一个问题,我的 WPF-App 在平板电脑模式下启动时不会出现,我使用了 AutoHotKey 脚本。 您也可以创建一个 .exe。 来源:https://autohotkey.com/boards/viewtopic.php?t=15619 #NoEnv SetBatchLines -1 ListLines Off #NoTrayIcon
  • Android:禁用平板电脑应用程序(Android: Disable application for tablet)
    问题 我开发了一个应用程序,现在我想限制平板电脑的应用程序。 表示该应用程序不应在任何平板电脑上运行。 为此,我将Androidmenifest.XML文件中的支持屏幕指定为: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.abc.xyz" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="5" android:targetSdkVersion="17" android:maxSdkVersion="17" /> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="false" android:xlargeScreens="false" android:resizeable="true" android:anyDensity="true" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission
  • Disable mobile network programmatically
    I'm developing an app in which user can enable/disable mobile network on button click. I googled regarding this, but I get the solution of Airplane mode only. In airplane mode, WI-FI and Bluetooth are also disabled. I don't want them to disable by using airplane mode concept. I want only mobile network to be disabled. What are the possible way to implement it pro-grammatically?