【问题标题】:Launch the new "Scanning" settings activity on Android Marshmallow在 Android Marshmallow 上启动新的“扫描”设置活动
【发布时间】:2016-01-16 07:16:49
【问题描述】:

目标是以编程方式进入 Android 中的“设置”活动,该活动控制在 Android M 之前的高级 Wi-Fi 设置中曾经是“Wi-Fi 扫描始终可用”的选项。我曾经进入此活动如下:

startActivity(new Intent(Settings.ACTION_WIFI_IP_SETTINGS));

该设置现已移至设置 -> 位置 -> 扫描(溢出菜单)下。在新页面的设置下似乎没有定义常量。如何让用户从我的应用程序进入这个新屏幕?

我在 com.android.settings.location.ScanningSettings.java 找到了相关的偏好片段。我认为 SettingsActivity 使用它来启动此首选项面板?

https://github.com/android/platform_packages_apps_settings/blob/master/src/com/android/settings/location/ScanningSettings.java

【问题讨论】:

    标签: android settings android-6.0-marshmallow


    【解决方案1】:

    如何让用户从我的应用程序进入这个新屏幕?

    很遗憾,您不能,没有打开该片段的操作。

    最好的办法是使用以下代码打开位置设置:

    startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
    

    并让用户打开溢出菜单并选择Scanning

    另一种可能的解决方案是直接从您的应用中提示请求:

    首先检查 Wi-Fi 扫描状态,如果禁用则显示对话框:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
        WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        if (wifiManager.isScanAlwaysAvailable()) {
            Toast.makeText(MainActivity.this, "Wi-Fi scanning is on", Toast.LENGTH_SHORT).show();
        } else {
            startActivityForResult(new Intent(WifiManager.ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE), MY_REQUEST_CODE);
        }
    }
    

    然后在onActivityResult 中检查用户选择了什么:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        if (requestCode == MY_REQUEST_CODE) {
            if (resultCode == RESULT_OK) {
                Toast.makeText(this, "User has enabled Wi-Fi scanning", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "User has denied Wi-Fi scanning", Toast.LENGTH_SHORT).show();
            }
        }
    }
    

    【讨论】:

    • 感谢您的回答。这基本上就是我现在正在做的事情。我希望有一种方法可以直接进入该屏幕,因为指示用户浏览溢出菜单有点麻烦。在我的应用程序中,我实际上是在尝试禁用 WiFi 扫描,但很高兴看到有一种直接的方法可以使用 ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE 启用它。
    • 蓝牙扫描有类似的吗?例如,在 Android Pie 中手动执行此操作是:打开 Android 设置 --> 转到位置 --> 高级 --> 扫描。如何通过代码访问该蓝牙选项?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 2016-09-27
    相关资源
    最近更新 更多