I have a Nikon 5300 DSLR and an Android 7.1.2 device (LineageOS).

I want to use Nikon's official WirelessMobileUtility app to browse/transfer pictures and take pictures without touching the camera.

Problem: The connection never works, even after trying dozens of times. In the manual (and YouTube tutorials) the steps are so easy (enable WiFi on the camera, connect to that WiFi from the phone, start app) yet the app never manages to connect. Many recent Play Store reviews mention this problem.

How to make the connection succeed?

Important: This question is only for Android 7.1.2 and above

This procedure requires root access.

  1. Install a terminal such as ConnectBot (F-Droid, Play Store)
  2. Type su
  3. Type this command: settings put global captive_portal_mode 0
  4. Press Enter
  5. That's all, the connection should work immediately.

disable captive portal mode

Screenshot (click image for a larger variant)

Explanation: Since 7.1.2 Android has changed the way captive portals are handled, and the camera's WiFi, which does not give access to the Internet, is considered a captive portal and since it does not reply as expected the connection is gets dropped. Setting the captive_portal_mode variable to 0 prevents Android from doing that.

Details: https://github.com/LineageOS/android_frameworks_base/blob/cm-14.1/core/java/android/provider/Settings.java#L8268

(By the way, for devices with an Android version earlier than 7.1.2 the command is settings put global captive_portal_detection_enabled 0)

  • Just out of curiosity: Does that really require root – or might the "elevated privileges" of the shell user via ADB be sufficient? I have no device with 7.x+ to test, but maybe you have? – Izzy Mar 13 at 13:46
  • @Izzy: I haven't tried, I just thought it was necessary after reading android.stackexchange.com/a/148442/501 – Nicolas Raoul Mar 13 at 13:55
  • @Nicholas I think this is somewhat related to : WIFI connection with question mark, also check the answer for other methods of resolving this issue. I would also like to believe this requires elevated priviledges.. – xavier_fakerat Mar 13 at 14:15
  • OK, answering myself: as I suspected, it does not require root (except when run in a terminal directly on the device) – the adb shell variant suffices. One more reference: this answer at SO. Maybe you want to integrate that with your answer, @NicolasRaoul? Also note the exact command seems to depend on the Android version, see this XDA post (you already indicated that). – Izzy Mar 13 at 14:56
  • 1
    @Izzy: I just tried with typing su, I get Error while accessing settings provider java.lang.SecurityException: Permission Denial: Do not have permission in call getContentProviderExternal() from pid=12592, uid=10124 requires android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY. With the su step it works. – Nicolas Raoul Sep 21 at 1:25

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.