前提
Wi-Fi Direct通信を行うアプリをAndroid Sutudioを使ってコーディング/デバッグしています。
複数のデバイス間で滞りなく通信が行えることを確認するために、以下の3台のデバイスの実機をUSB接続でつなげて、デバッグしていたのですが、ある日を境にGoogle Pixel 4aだけ、違った動きをするようになりました。
具体的に言うと、デバイス検出処理の初期化に相当すると思われるclearLocalServicesメソッドで、それまで呼ばれていたonSuccessコールバックが呼ばれずに、onFailureコールバックが呼ばれるようになりました。
- Google Pixel 4a
- Sony XQ-AU52(Xperia)
- Sharp SH-M19(AQUOS sense6)
※デバイス検出処理は、p2pネットワークを構成するために、接続する相手を選ぶための手順の一部だと理解しています。
実現したいこと
- 発生している現象の原因究明
- その対策
ご教授、ご指導の程、宜しくお願い致します。
ソースコードの該当箇所
"WifiP2pManager" の "clearLocalServices" に渡したActionListenerの "onFailure" コールバック関数が呼ばれてしまいます。
Kotlin
1 manager.clearLocalServices(channel, object : WifiP2pManager.ActionListener{ 2 override fun onSuccess() { 3 Log.d(tag, "---onCreate---onSuccess") 4 5 } 6 7 override fun onFailure(p0: Int) { 8 Log.d(tag, String.format("---onCreate---onFailure---p0:[%d]", p0)) 9 return 10 } 11 })
ソースコード
検証用に簡略化したAndroid Studioプロジェクトのソースコードを下に載せます。
不具合の内容
コールバック関数のcodeという名前のパラメーターに、2が帰ってきます。
Android for Developersのドキュメントには、2: Busy と書かれています。
開発環境(Android Studioのバージョン)
Android Studio Arctic Fox | 2020.3.1 Patch 4
Build #AI-203.7717.56.2031.7935034, built on November 21, 2021
Runtime version: 11.0.10+0-b96-7249189 amd64
VM: OpenJDK 64-Bit Server VM by Oracle Corporation
Windows 10 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 1280M
Cores: 12
Registry: documentation.show.toolbar=true, external.system.auto.import.disabled=true
Non-Bundled Plugins: com.intellij.marketplace, com.thoughtworks.gauge, org.jetbrains.kotlin, org.intellij.plugins.markdown
ソースコード
AndroidManifest.xml
xml
1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="firstlast20180521.errorsample"> 4<!-- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />--> 5<!-- <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>--> 6<!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />--> 7<!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />--> 8 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 9 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 10<!-- <uses-permission android:name="android.permission.INTERNET" />--> 11 <application 12 android:allowBackup="true" 13 android:icon="@mipmap/ic_launcher" 14 android:label="@string/app_name" 15 android:roundIcon="@mipmap/ic_launcher_round" 16 android:supportsRtl="true" 17 android:theme="@style/Theme.ErrorSample"> 18 <activity 19 android:name=".MainActivity" 20 android:exported="true"> 21 <intent-filter> 22 <action android:name="android.intent.action.MAIN" /> 23 <category android:name="android.intent.category.LAUNCHER" /> 24 </intent-filter> 25 </activity> 26 </application> 27 28</manifest>
MainActivity.kt
Kotlin
1package firstlast20180521.errorsample 2 3import android.content.Context 4import android.net.wifi.p2p.WifiP2pManager 5import androidx.appcompat.app.AppCompatActivity 6import android.os.Bundle 7import android.util.Log 8 9class MainActivity : AppCompatActivity() { 10 11 private lateinit var manager: WifiP2pManager 12 private lateinit var channel: WifiP2pManager.Channel 13 14 companion object{ 15 const val tag: String = "MainActivity" 16 } 17 18 override fun onCreate(savedInstanceState: Bundle?) { 19 super.onCreate(savedInstanceState) 20 setContentView(R.layout.activity_main) 21 22 Log.d(tag, "---onCreate---") 23 24 manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager 25 channel = manager.initialize(this, mainLooper, null) 26 27 manager.clearLocalServices(channel, object : WifiP2pManager.ActionListener{ 28 override fun onSuccess() { 29 Log.d(tag, "---onCreate---onSuccess") 30 31 } 32 33 override fun onFailure(p0: Int) { 34 Log.d(tag, String.format("---onCreate---onFailure---p0:[%d]", p0)) 35 return 36 } 37 }) 38 39 } 40}
app/build.gradle
Kotlin
1plugins { 2 id 'com.android.application' 3 id 'kotlin-android' 4} 5 6android { 7 compileSdk 31 8 9 defaultConfig { 10 applicationId "firstlast20180521.errorsample" 11 minSdk 28 12 targetSdk 31 13 versionCode 1 14 versionName "1.0" 15 16 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 17 } 18 19 buildTypes { 20 release { 21 minifyEnabled false 22 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 23 } 24 } 25 compileOptions { 26 sourceCompatibility JavaVersion.VERSION_1_8 27 targetCompatibility JavaVersion.VERSION_1_8 28 } 29 kotlinOptions { 30 jvmTarget = '1.8' 31 } 32} 33 34dependencies { 35 36 implementation 'androidx.core:core-ktx:1.7.0' 37 implementation 'androidx.appcompat:appcompat:1.4.0' 38 implementation 'com.google.android.material:material:1.4.0' 39 implementation 'androidx.constraintlayout:constraintlayout:2.1.2' 40 testImplementation 'junit:junit:4.+' 41 androidTestImplementation 'androidx.test.ext:junit:1.1.3' 42 androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' 43}
関連URL
WifiP2pManager.clearLocalServices
WifiP2pManager.ActionListener
回答1件
あなたの回答
tips
プレビュー