0

This exception happens when a parent class is called from my WearOS main activity derived from WearableActivity:

class MainActivity() : WearableActivity(),
        CapabilityClient.OnCapabilityChangedListener {
    ...
      override fun onDestroy() {
    super.onDestroy() // <--- Here !!!

    if (mApp?.receiver != null) {
        Util.d(TAG, "UNREG " + mApp?.receiver)
        androidx.localbroadcastmanager.content.LocalBroadcastManager.getInstance(this).unregisterReceiver(mApp!!.receiver!!)
        mApp!!.receiver = null
    }
}

The full stack trace from Google Play is below. The watch model is Samsung Watch 4 running Android 11. I didn't see the crash on other watches.

java.lang.RuntimeException: 
  at android.app.ActivityThread.performDestroyActivity (ActivityThread.java:5147)
  at android.app.ActivityThread.handleDestroyActivity (ActivityThread.java:5176)
  at android.app.servertransaction.DestroyActivityItem.execute (DestroyActivityItem.java:44)
  at android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:176)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:97)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2073)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:246)
  at android.app.ActivityThread.main (ActivityThread.java:7690)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:593)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:995)
Caused by: java.lang.SecurityException: 
  at android.os.Parcel.createExceptionOrNull (Parcel.java:2400)
  at android.os.Parcel.createException (Parcel.java:2384)
  at android.os.Parcel.readException (Parcel.java:2367)
  at android.os.Parcel.readException (Parcel.java:2309)
  at com.google.android.wearable.ambient.activity.IAmbientActivityService$Stub$Proxy.detach (IAmbientActivityService.java:366)
  at com.google.android.wearable.compat.WearableActivityController$AmbientServiceConnection.detach (WearableActivityController.java:886)
  at com.google.android.wearable.compat.WearableActivityController.detach (WearableActivityController.java:667)
  at com.google.android.wearable.compat.WearableActivityController.update (WearableActivityController.java:268)
  at com.google.android.wearable.compat.WearableActivityController.onDestroy (WearableActivityController.java:202)
  at c.b.e (WearableActivityDelegate.java:2)
  at c.a.onDestroy (WearableActivity.java:1)
  at android.app.Activity.performDestroy (Activity.java:8278)
  at android.app.Instrumentation.callActivityOnDestroy (Instrumentation.java:1344)
  at android.app.ActivityThread.performDestroyActivity (ActivityThread.java:5132)
Caused by: android.os.RemoteException: 
  at com.android.server.am.ActivityManagerService.enforceCallingPermission (ActivityManagerService.java:6521)
  at com.android.server.am.ActivityManagerService$LocalService.enforceCallingPermission (ActivityManagerService.java:19800)
  at com.android.server.wm.ActivityTaskManagerService.enforceCallerIsRecentsOrHasPermission (ActivityTaskManagerService.java:3841)
  at com.android.server.wm.ActivityTaskManagerService.getFocusedStackInfo (ActivityTaskManagerService.java:2293)
  at com.android.server.am.ActivityManagerService.getFocusedStackInfo (ActivityManagerService.java:17678)
Oleg Gryb
  • 5,122
  • 1
  • 28
  • 40

1 Answers1

1

I don't think (not100% sure) the WearableActivityController is expected to be used in a modern Wear app. Is it from com.google.android.wearable:wearable:2.9.0?

Are you using it for ambient support? If so look at https://github.com/android/wear-os-samples/blob/main/AlwaysOnKotlin/views/src/main/java/com/example/android/wearable/wear/alwayson/MainActivity.kt

Yuri Schimke
  • 12,435
  • 3
  • 35
  • 69
  • In my gradle I have this: "implementation com.google.android.support:wearable:2.4.0" and this "compileOnly 'com.google.android.wearable:wearable:2.4.0". I do setAmbientEnabled in onCreate for an activity that requires updates by timer events, otherwise a user doesn't get a correct token (that was a complaint). Should I disable it on OnDestroy for that view? – Oleg Gryb Jul 17 '22 at 17:21
  • I can't advise on that library, there are more modern APIs for ambient mode that I linked above. But I'd try upgrading to 2.9.0 first. – Yuri Schimke Jul 18 '22 at 05:26