AndroidStudio4.1.1でkotlinで指定のWifiに接続する機能を持つアプリを作ろうとしています。
こちらを参照して作っています。
しかしwifiManagerのstartScanメソッドを実行するとアプリが落ちてしまい困ってます。
こちらがコードになります。
kotlin
1import android.Manifest 2import android.content.BroadcastReceiver 3import android.content.Context 4import android.content.Intent 5import android.content.IntentFilter 6import android.content.pm.PackageManager 7import android.net.wifi.WifiConfiguration 8import android.net.wifi.WifiManager 9import android.os.Build 10import android.os.Bundle 11import android.webkit.WebView 12import androidx.annotation.NonNull 13import androidx.appcompat.app.AppCompatActivity 14import androidx.core.content.ContextCompat 15 16 17class MainActivity : AppCompatActivity() { 18 19 private val PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION = 0 20 private val wifiManager: WifiManager get() = this.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager 21 private lateinit var webview : WebView 22 23 val wifiScanReceiver = object : BroadcastReceiver() { 24 override fun onReceive(context: Context, intent: Intent) { 25 val success = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false) 26 if (success) { 27 scanSuccess() 28 } else { 29 scanFailure() 30 } 31 } 32 } 33 34 override fun onCreate(savedInstanceState: Bundle?) { 35 super.onCreate(savedInstanceState) 36 setContentView(R.layout.activity_main) 37 // 許可されているかどうか 38 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 39 // 許可されていないなら「onRequestPermissionsResult」に移行してリクエストする 40 requestPermissions(arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION) 41 } else { 42 // 許可済みの処理 43 // startScan() が呼ばれると SCAN_RESULTS_AVAILABLE_ACTION がブロードキャストされる 44 registerReceiver(wifiScanReceiver, IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) 45 46 val success = wifiManager.startScan() 47 if (!success) { 48 scanFailure() 49 } 50 } 51 52 webview = findViewById(R.id.webView_id) 53 webview.loadUrl("https://www.google.com/?hl=ja") 54 } 55 56 private fun scanSuccess() { 57 // スキャン成功処理 58 print("scan success") 59 } 60 61 private fun scanFailure() { 62 // スキャン失敗処理 63 print("scan failuer") 64 } 65 66 // 許可されてない場合はここに移行 67 override fun onRequestPermissionsResult(requestCode: Int, @NonNull permissions: Array<String>, @NonNull grantResults: IntArray) { 68 super.onRequestPermissionsResult(requestCode, permissions, grantResults) 69 // ユーザーから許可されなかったら終了 70 if (requestCode != PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION) { 71 return 72 } 73 if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 74 // 許可済みの処理 75 76 } 77 } 78}
パーミッション
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
AndroidStudioのエディター上ではstartScanという文字に取り消し線が入っています。
カーソルを当てると「startScan(): Boolean' is deprecated. Deprecated in Java」と出てきます。
これについて調べてみるとグーグルがアプリにWifiのスキャンを制限することを既に3年前には計画していることが分かりました。
しかしstartScanを普通に使っている参考にしたサイトは1年8ヶ月前に投稿されているためその間に何かあったのでしょうか?
AndroidDevelopersを見ると厳重な制限がなされている様ですが完全に制限したわけではないのにstartScanが使えないことに違和感があります。
なんにせよその制限のせいでアプリが落ちてしまっていると思われるのですがこれを回避する方法はないでしょうか?
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー