2015-10-17 45 views
2

目標是以編程方式訪問Android中的Settings(設置)活動,該活動控制先前的Wi-Fi設置中的「始終可用的Wi-Fi掃描」選項到Android M.經常拿這個活動如下:在Android Marshmallow上啓動新的「掃描」設置活動

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

回答

0

我怎樣才能從我的應用程序,用戶到這個新的屏幕?

不幸的是,你不能,沒有一個動作,打開該片段。

最好的辦法是與此代碼打開位置設置:

startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 

,並讓用戶打開溢出菜單,然後選擇Scanning

另一種可能的解決辦法是及時的要求,直接從您的應用程序:

enter image description here

首先檢查的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(); 
     } 
    } 
} 
+0

感謝您的回答。這實際上是我現在正在做的。我希望有一種方法可以直接進入屏幕,因爲指導用戶瀏覽溢出菜單有點麻煩。在我的應用程序中,我實際上試圖禁用WiFi掃描,但很高興看到有一種直接的方法可以通過ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE啓用它。 – Flyview