web-dev-qa-db-ja.com

プログラムでAndroid OWiFiホットスポットを有効にする方法

WifiManager非表示APIを使用して、Wifiテザリングを有効にし、アクセスポイントを作成してきました。 AndroidのAPI26での問題は、タグ@RequiresPermission(Android.Manifest.permission.TETHER_PRIVILEGED)setWifiApEnabled関数に追加され、呼び出しがfalseを返し、次のログが印刷:

W/WifiManager:PACKAGE_NAMEがsetWifiApEnabledの呼び出しを試みましたenabled = true

新しいドキュメントを読むと、この関数は非推奨であり、今後のリリースで削除され、呼び出し元に適切な権限がある場合は代わりにConnectivityManager#startTetheringを使用するが、このアプローチにはTETHER_PRIVILEGED権限がない場合と同じ問題があると記載されています。ドキュメントに示されているもう1つのオプションは、LocalOnlyHotspotの使用ですが、作成されたホットスポットにはインターネット接続がないため、これはプロジェクトには使用できません。

非表示のAPIのstartSoftAp関数でもテストしましたが、次の例外がスローされるため、成功しませんでした。

WifiService:ユーザー10164も現在のプロセスもAndroid.permission.NETWORK_STACKを持っていません

新しいAPIでWifiホットスポットをアクティブ化するための回避策はありますか? Wifiテザリングの代替手段も探しましたが、実行可能な唯一の代替手段は、3G速度しか得られないという欠点のあるBluetoothテザリングのようです。 WifiAwareとWifiP2Pも検討されましたが、これらにはインターネット接続がデバイス間で共有されないという問題があります。

これにアプローチする方法について何か提案はありますか?

6
Tiago Ferreira

いいえ、In Android Oセキュリティが強化されたため、非表示のOnStartTetheringCallbackが必要なため、リフレクションを介して「startTethering」を呼び出すことはできません。したがって、Androidビルドでは、APIを使用できます。必要に応じてLocalOnlyHotspotCallbackを使用できます。

1

これは何度も答えられています。 Snehashish Agarwalが言ったように、setWifiApEnabled()メソッドとstartThethering()メソッドはプライベートAPIです。 @hideアノテーションが付けられているため、プライベートです。サードパーティのアプリケーションがプライベートAPIを直接呼び出すことはできません。それらが将来機能するという保証はありません。あなたの場合のように。

また、 startLocalOnlyHotspot はインターネットにアクセスできません。 Wifiホットスポットに接続されたデバイス間で通信するのはローカルのみのホットスポットであり、この方法ではインターネットにアクセスできません。

現在、モバイルホットスポットを有効にするための公式のAPI呼び出しはありません。

1
Android4Fun