質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

841閲覧

WifiP2pManager の clearLocalServices()メソッド に渡したActionListenerリスナーが 、ある日を境に、onFailureコールバックを呼ぶようになった。

firstlast

総合スコア138

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2022/01/16 10:12

編集2022/01/16 10:15

前提

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

firstlast

2022/01/17 00:21

じんべさま、いつもありがとうございます。 以前、clearLocalServicesを実装してなかったときに、違った問題が発生して後続の処理を実行出来なかった記憶がありますが、おっしゃることを今一度試してみたいと思います。 また、onSuccessに書いていた後続の処理すべてを、1つ外に出してclearLocalServicesと同じレベル、clearLocalServicesの呼び出しの直後に、書いて試してみます。
jimbe

2022/01/17 04:07

P2P や Wifi Direct に詳しい/慣れているわけではありませんで、単に『それらのドキュメントに clearLocalServices が見当たらなかったので。本当に clearLocalServices が「デバイス検出処理の初期化に相当する」のかが分からない』状態です。 ( clearLocalServices のドキュメントを見ても用語に "?" が付く程度にP2P/WifiDirect も分かっておりません ^^;) > clearLocalServicesを実装してなかったときに、違った問題が発生して後続の処理を実行出来なかった こちらのほうからもう一度見直される必要があるかもしれないということですね。
firstlast

2022/01/17 05:47

検証してみたところ、clearLocalServiceを呼び出さなくても、後続の処理は問題なく動作しました。 現象が発生してるデバイスだけでなく、他のデバイスでも試してみましたが同様でした。 一旦、clearLocalServiceの部分をコメントアウトすることにしました。 問題解決です。ありがとうございました。 因みに、ソースコードを変更していないのに、onSuccessが呼ばれずに、onFailureが呼ばれるようになったのは、pixelのアンドロイドOSが何かの都合で改変されたんだろうと思います。企業ごとにAPIの挙動が異なることもあると認識できてよかったです。各ベンダーの更新履歴のようなものがあれば教えて頂きたいところです。
firstlast

2022/01/17 05:52

jimbeさんの回答をベストアンサーにしたいと思いますので、よかったら回答の方にも何か投稿してください。
jimbe

2022/01/17 06:38

アプリとしては動作して解決かもしれませんが、結局「何故clearLocalService が BUSY を返したのか(もしくは何故今まで返さなかったのか)」等は分かっていないわけですが…(悩) 14:47 にお書きになったコメントの「一旦、clearLocalServiceの部分をコメントアウトすることにしました。」までの文を自己回答としてお書きになって BA とし、本当に動作が判明したときに回答を修正もしくは新たに追加して BA を選び直すする等は如何でしょうか。( BA 後もそれらが出来ます。 )
firstlast

2022/01/17 06:48

そうさせて頂きます。返信ありがとうございます。
guest

回答1

0

自己解決

jimbeさまのアドバイスを参考に、検証してみたところ、clearLocalServiceを呼び出さなくても、後続の処理は問題なく動作しました。
現象が発生してるデバイスだけでなく、他のデバイスでも試してみましたが同様でした。
一旦、clearLocalServiceの部分をコメントアウトすることにしました。

投稿2022/01/17 06:50

firstlast

総合スコア138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問