繁体   English   中英

在Android棉花糖上启动新的“扫描”设置活动

[英]Launch the new “Scanning” settings activity on Android Marshmallow

我们的目标是通过编程方式进入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

如何使用户从我的应用程序转到这个新屏幕?

不幸的是,您不能打开该片段。

最好的选择是使用以下代码打开“位置”设置:

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();
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM