CallScreeningServcie Runtime Exception

Ich verbinde den CallScreeningServcie mithilfe von Messenger mit der MainActivity. Die Kommunikation zwischen Main und Service funktioniert von beiden Seite her ausgelöst problemlos. Wenn jedoch das erste Call-Ereignis, z.B. "ringing" geschieht, erscheint im Log eine RuntimeException, aus der ich nicht schlau werden und nicht sehen kann, was am Interface inkorrekt ist. Ich wäre dankbar, wenn mir jemand weiterhelfen kann.Logcat:2023-08-24 11:56:23.379 6731-6749 Parcel com.example.anrufdemo3 W **** enforceInterface() expected 'android.os.IMessenger' but read 'com.android.internal.telecom.ICallScreeningService'2023-08-24 11:56:23.380 6731-6749 Binder com.example.anrufdemo3 W Caught a RuntimeException from the binder stub implementation.java.lang.SecurityException: Binder invocation to an incorrect interfaceat android.os.Parcel.nativeEnforceInterface(Native Method)at android.os.Parcel.enforceInterface(Parcel.java:623)at android.os.IMessenger$Stub.onTransact(IMessenger.java:79)at android.os.Binder.execTransactInternal(Binder.java:1021)at android.os.Binder.execTransact(Binder.java:994)MyCallScreening.kt Code package com.example.anrufdemo3 import android.content.Intent import android.os.Bundle import android.os.Handler import android.os.IBinder import android.os.Looper import android.os.Message import android.os.Messenger import android.os.SystemClock import android.telecom.Call import android.telecom.CallScreeningService import android.util.Log const val TEL_PREFIX = tel: const val MSG_CSS_RC = 0 const val MSG_CSS_IN = 1 const val MSG_CSS_OUT = 2 const val MSG_CSS_END = 3 const val MSG_CSS_DAT = 4 const val MSG_CSS_ASY = 5 class MyCallScreening: CallScreeningService() { private lateinit var mCallDetails: Call.Details //temporary fix for future later use private val mClients: ArrayList<Messenger> = ArrayList() private lateinit var messenger: Messenger override fun onBind(intent: Intent): IBinder? { messenger = Messenger(IncomingHandler(mClients)) return messenger.binder } override fun onScreenCall(callDetails: Call.Details) { mCallDetails = callDetails Log.i( onScreenCall Service , callDetails.toString()) if (mClients.size > 0) { try { val msg: Message = Message.obtain(null, MSG_CSS_DAT) msg.arg1 = callDetails.callDirection val b = Bundle() b.putString( telNr , callDetails.handle.toString()) msg.data = b mClients[0].send(msg) } catch (ex: Exception) { Log.e( onScreenCall Service , $ex ) } } val response = CallResponse.Builder() if (callDetails.callDirection == Call.Details.DIRECTION_INCOMING) { response.apply { setRejectCall(true) setDisallowCall(true) setSkipCallLog(false) } } respondToCall(callDetails, response.build()) } private class IncomingHandler(val clients: ArrayList<Messenger>): Handler(Looper.getMainLooper()) { private val timer = Handler(Looper.getMainLooper()) override fun handleMessage(msg: Message) { when (msg.what) { MSG_CSS_RC -> { // register client clients.add(msg.replyTo) Log.d( CSS incoming , init ${clients.size} $clients ) } MSG_CSS_IN -> { // in out test Log.d( CSS incoming , alive ${clients.size} $clients, ${msg.arg1}, ${msg.arg2} ) if (clients.size > 0) { try { msg.replyTo.send(Message.obtain(null, MSG_CSS_OUT, 6, 7)) } catch (ex: Exception) { Log.e( onScreenCall Service , $ex ) } // asynch out test timer.postAtTime(asyMsg, SystemClock.uptimeMillis() + 500L) } } MSG_CSS_END -> { Log.d( CSS incoming , end ${clients.size} $clients ) } else -> super.handleMessage(msg) } } private val asyMsg = Runnable { if (clients.size > 0) { try { clients[0].send(Message.obtain(null, MSG_CSS_ASY, 8,9 )) } catch (ex: Exception) { Log.e( onScreenCall asynch , $ex ) } } } }// val abc: (Int) -> Unit = {} } Alles anzeigen require(['Language', 'WoltLabSuite/Core/Bbcode/Collapsible', 'WoltLabSuite/Core/Bbcode/Code'], function (Language, BbcodeCollapsible, BbcodeCode) { Language.addObject({ 'wcf.message.bbcode.code.copy': 'Inhalt kopieren', 'wcf.message.bbcode.code.copy.success': 'Der Inhalt wurde erfolgreich kopiert.' }); BbcodeCollapsible.observe(); BbcodeCode.processAll(); }); Ausschitte aus Main: Code class MainActivity : AppCompatActivity() { private var msgService: Messenger? = null private val messenger = Messenger(IncomingHandler()) private val connection = object : ServiceConnection { override fun onServiceConnected(name: ComponentName, service: IBinder) { msgService = Messenger(service) msgService?.let { try { // register the Messenger(IncomingHandler()) for CallScreeningService events val msg = Message.obtain(null, MSG_CSS_RC,0,0) msg.replyTo = messenger it.send(msg) } catch (ex: Exception) { Log.d( Main Init CSS , $ex ) } } B.buCall.isEnabled = true } override fun onServiceDisconnected(name: ComponentName) { msgService = null } } ....... private fun startService() { intent = Intent(this, MyCallScreening::class.java) if (roleManager.isRoleHeld(RoleManager.ROLE_CALL_SCREENING)) bindService(intent, connection, Context.BIND_AUTO_CREATE) } override fun onDestroy() { super.onDestroy() msgService?.let { unbindService(connection) } msgService = null } Alles anzeigen require(['Language', 'WoltLabSuite/Core/Bbcode/Collapsible', 'WoltLabSuite/Core/Bbcode/Code'], function (Language, BbcodeCollapsible, BbcodeCode) { Language.addObject({ 'wcf.message.bbcode.code.copy': 'Inhalt kopieren', 'wcf.message.bbcode.code.copy.success': 'Der Inhalt wurde erfolgreich kopiert.' }); BbcodeCollapsible.observe(); BbcodeCode.processAll(); });

zum Artikel gehen

BUN: Die neue JavaScript Runtime im Fokus

In der schnelllebigen Welt der Webentwicklung gibt es ständig Neuerungen, die das Potenzial haben, unsere Arbeitsweise grundlegend zu verändern. Eine solche Innovation ist Bun, eine neue JavaScript Runtime, die sich durch ihre Geschwindigkeit und Effizien

zum Artikel gehen

Lexikoneintrag: Windows App SDK

Windows App SDK nennt Microsoft das im November 2021 erstmal erschienene SDK zur App-Entwicklung. Zugehrige Runtime: Windows App Runtime Namensraum der Klasse: Windows.* Programmierbar mit C# und C++ Codename ------------------------ Project Reun

zum Artikel gehen

Fachveröffentlichung: Politur an allen Ecken und Enden: .NET 9.0 Preview 3 und 4 - Teil 2

Nachdem in der letzten Ausgabe die in .NET 9.0 Preview 3 und 4 eingefhrten Neuerungen in C# 13.0, in der Runtime, dem SDK und der Basisklassenbibliothek von .NET 9.0 sowie Entity Framework 9.0 thematisiert wurden, geht es dieses Mal um Ergnzungen in ASP.N

zum Artikel gehen

Schulung: Umstieg auf .NET 6.0/8.0/9.0 - Entscheiderworkshop (Umstellung/Migration von klassischem .NET Framework zu .NET 6.0/8.0/9.0)

Strategiewechsel bei Microsoft Die .NET-Welt: Platformen und Anwendungsarten Wie geht es weiter mit .NET? Agilitt bim modernen .NET: Breaking Changes, Umgang mit Bugs, Support Werkzeuge fr das moderne .NET .NET SDK & Runtime Programmiersprachen

zum Artikel gehen

Veranstaltung: .NET 9.0 im Überblick: Neuigkeiten für SDK, Runtime und Basisklassen

Der Erffnungsvortrag von DOTNET-DOKTOR Holger Schwichtenberg beschftigt sich traditionell mit den Themen, die fr alle .NET-Entwickler wichtig sind: Betriebssystemuntersttzung, Support, Kompatibilitt und Migration sowie Neuerungen im .NET Software Developm

zum Artikel gehen