Android 9.0 wifi hotspot API

前端 未结 2 1113
时光说笑
时光说笑 2020-12-20 08:27

What is the API call I need to make in Android 9.0 (Android P) to get a Wifi hotspot name?

public static String getWifiApSSID(Context context) {
        try         


        
相关标签:
2条回答
  • 2020-12-20 09:05

    You're using reflection method getWifiApiConfiguration which doesn't works for API>=26. Good news, for API>=26, you don't need to use reflection. You can just use the public exposed API by android i.e. startLocalOnlyHotspot

    It requires Manifest.permission.CHANGE_WIFI_STATE and ACCESS_FINE_LOCATION permissions.

    Here's a simple example of how you can turn on hotspot using this API.

        private WifiManager wifiManager;
    WifiConfiguration currentConfig;
    WifiManager.LocalOnlyHotspotReservation hotspotReservation;
    

    The method to turn on hotspot:

    `
    @RequiresApi(api = Build.VERSION_CODES.O)
    public void turnOnHotspot() {
    
          wifiManager.startLocalOnlyHotspot(new WifiManager.LocalOnlyHotspotCallback() {
    
            @Override
            public void onStarted(WifiManager.LocalOnlyHotspotReservation reservation) {
              super.onStarted(reservation);
              hotspotReservation = reservation;
              currentConfig = hotspotReservation.getWifiConfiguration();
    
              Log.v("DANG", "THE PASSWORD IS: "
                  + currentConfig.preSharedKey
                  + " \n SSID is : "
                  + currentConfig.SSID);
    
              hotspotDetailsDialog();
    
            }
    
            @Override
            public void onStopped() {
              super.onStopped();
              Log.v("DANG", "Local Hotspot Stopped");
            }
    
            @Override
            public void onFailed(int reason) {
              super.onFailed(reason);
              Log.v("DANG", "Local Hotspot failed to start");
            }
          }, new Handler());
        }
    `
    

    Here's how you can get details of the locally created hotspot

    private void hotspotDetaisDialog()
    {
    
        Log.v(TAG, context.getString(R.string.hotspot_details_message) + "\n" + context.getString(
                  R.string.hotspot_ssid_label) + " " + currentConfig.SSID + "\n" + context.getString(
                  R.string.hotspot_pass_label) + " " + currentConfig.preSharedKey);
    
    }
    `
    

    I recently created a demo app called Spotserve. That turns on wifi hotspot for all devices with API>=15 and hosts a demo server on that hotspot. You can check that for more details. Hope this helps!

    0 讨论(0)
  • 2020-12-20 09:18

    You have another option if your device its rooted.

    Use this command to enable:

    service call connectivity 24 i32 0 i32 1 i32 0 s16 text > /dev/null
    

    In the official documentation of Android, the method startLocalOnlyHotspot allows sharing an internal connection but doesn't have access to internet.

    0 讨论(0)
提交回复
热议问题