閲覧いただきありがとうござます。
ラズパイのWiFiにAndroidで接続し、Androidアプリからラズパイに接続したカメラの映像を閲覧できるようにしたいです。
モバイルデータ通信がオフの状態では問題ないです。
しかしモバイルデータ通信がオンの状態ではラズパイのWiFiがインターネットなしなのでモバイルデータ通信が優先されるようになってしまいラズパイのカメラの映像が受信できないです。
(この仕様はAndroid9.0から)
過去に全く同じことをしようとしている質問者を発見しました。
しかし結局問題の解決には至っていない様です。
https://teratail.com/questions/245073
そのためやむ終えずアプリ起動時にモバイルデータ通信をオフにしてしまおうと考えました。
しかしAndroid5.0以降はモバイルデータ通信のオンオフはroot権限がないとできない様です。
参考:https://stackoverflow.com/questions/52850101/how-can-i-turn-off-4g-data-programmatically
GooglePlay上にたくさんあったモバイルデータ通信をオンオフ操作するアプリたちも今は動作しないか設定画面を開くようになっていました。
それでも試しにプログラムからモバイルデータ通信をオフにしようとしてみました。
しかし下記を実行した瞬間にアプリが落ちます。
kotlin
1// アプリ起動時に実行 2var method: Method = connectivityManager.javaClass.getMethod("setMobileDataEnabled", Boolean.TYPE) 3method.setAccessible(true) 4method.invoke(connectivityManager, false)
落ちた時のログ
2021-12-06 14:06:12.487 25673-25673/------ E/AndroidRuntime: FATAL EXCEPTION: main Process: com.----------------, PID: 25673 java.lang.RuntimeException: Unable to start activity ComponentInfo{-------------.MainActivity}: java.lang.NoSuchMethodException: android.net.ConnectivityManager.setMobileDataEnabled [boolean] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3835) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4011) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2325) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:246) at android.app.ActivityThread.main(ActivityThread.java:8633) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) Caused by: java.lang.NoSuchMethodException: android.net.ConnectivityManager.setMobileDataEnabled [boolean] at java.lang.Class.getMethod(Class.java:2072) at java.lang.Class.getMethod(Class.java:1693) at com.-------------r.MainActivity.onCreate(MainActivity.kt:76) at android.app.Activity.performCreate(Activity.java:8207) at android.app.Activity.performCreate(Activity.java:8191) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3808) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4011) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2325) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:246) at android.app.ActivityThread.main(ActivityThread.java:8633) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
スッタクオーバーフローに載っていた下記も試してみましたが何も起きず...
kotlin
1private fun disableMobileNetwork(context: Context) { 2 val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager 3 val request: NetworkRequest.Builder? 4 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 5 request = NetworkRequest.Builder() 6 request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI) 7 connectivityManager.requestNetwork( 8 request.build(), 9 object : ConnectivityManager.NetworkCallback() { 10 override fun onAvailable(network: Network) { 11 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 12 ConnectivityManager.setProcessDefaultNetwork(network) 13 } 14 } 15 } 16 ) 17 } 18 }
モバイルデータ通信のオンオフも通信の優先順位もAndroidOSが制御してしまっているため開発者側で操作するのは今はもう無理なのでしょうか?
無理であるのならば無理であると教えていただければ諦めがつきます。
しかし何か回避策があれば教えていただきたいです。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー