如何从复杂功能 setTapAction() BroadcastReceiver 启动 Wear OS 应用程序?

问题描述 投票:0回答:1

我使用内置的 Android Studio 项目“Empty Wear App With Tile and Complications”创建了一个带有磁贴和复杂功能的 Wear OS 应用程序。

当用户触摸复杂功能时,我希望应用程序启动。我在

setTapAction()
BroadcastReceiver
中尝试了很多东西;例如:

override fun onReceive(context: Context, intent: Intent) {
    //val appIntent = Intent(context.applicationContext, MainActivity::class.java)
    val appIntent = Intent(context, MainActivity::class.java)
    //val appIntent = Intent("au.gondwanasoftware.ontrack.presentation.MAIN")
    //appIntent.setPackage("au.gondwanasoftware.ontrack.presentation")
    //appIntent.setAction("au.gondwanasoftware.ontrack.presentation.MAIN")
    appIntent.addFlags(FLAG_ACTIVITY_NEW_TASK)
    Log.i(tag,"ComplicationBroadcastReceiver.onReceive() before startActivity()")
    //context.startActivity(appIntent)   // WIP 1 start app
    context.applicationContext.startActivity(appIntent)
    //startActivity(context.applicationContext, appIntent, null)
    Log.i(tag,"ComplicationBroadcastReceiver.onReceive() after startActivity()")
}

此版本提供以下 logcat:

2024-01-29 07:27:17.651 27808-27808 OnTrackTag              au.gondwanasoftware.ontrack          I  ComplicationBroadcastReceiver.onReceive() before startActivity()
2024-01-29 07:27:17.652   501-1691  ActivityTaskManager     system_server                        I  START u0 {flg=0x10000000 cmp=au.gondwanasoftware.ontrack/.presentation.MainActivity} from uid 10107
2024-01-29 07:27:17.653   501-1691  ActivityTaskManager     system_server                        W  Background activity start [callingPackage: au.gondwanasoftware.ontrack; callingUid: 10107; appSwitchState: 1; isCallingUidForeground: false; callingUidHasAnyVisibleWindow: false; callingUidProcState: RECEIVER; isCallingUidPersistentSystemProcess: false; realCallingUid: 10107; isRealCallingUidForeground: false; realCallingUidHasAnyVisibleWindow: false; realCallingUidProcState: RECEIVER; isRealCallingUidPersistentSystemProcess: false; originatingPendingIntent: null; allowBackgroundActivityStart: false; intent: Intent { flg=0x10000000 cmp=au.gondwanasoftware.ontrack/.presentation.MainActivity }; callerApp: ProcessRecord{c0dd48b 27808:au.gondwanasoftware.ontrack/u0a107}; inVisibleTask: false]
2024-01-29 07:27:17.654   501-1691  CellBroadcastUtils      system_server                        E  getDefaultCellBroadcastReceiverPackageName: no package found
2024-01-29 07:27:17.658 27808-27808 OnTrackTag              au.gondwanasoftware.ontrack          I  ComplicationBroadcastReceiver.onReceive() after startActivity()

...显然该应用程序没有出现(尽管否则启动正常)。

如何从复杂功能启动应用程序?


预计到达时间:这可能更接近(但仍然不起作用):

val appIntent = Intent("au.gondwanasoftware.action.ONTRACK")
intent.setClassName("au.gondwanasoftware.ontrack", "au.gondwanasoftware.ontrack.presentation.MainActivity")
appIntent.setFlags(FLAG_ACTIVITY_NEW_TASK)
context.startActivity(appIntent)

我在清单中添加了这个

intent-filter

<action android:name="au.gondwanasoftware.action.ONTRACK" />

这会抛出:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=au.gondwanasoftware.action.ONTRACK flg=0x10000000 }
wear-os android-wear-complication
1个回答
0
投票

是否使用广播接收器?如果您只想在同一个包中启动一个 Activity,有一个更简单的方法:

private fun createComplicationData(text: String, contentDescription: String) =
    ShortTextComplicationData.Builder(
        text = PlainComplicationText.Builder(text).build(),
        contentDescription = PlainComplicationText.Builder(contentDescription).build(),
    ).setTapAction(
        PendingIntent.getActivity(
            baseContext,
            42,
            Intent(baseContext, MainActivity::class.java),
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
    ).build() 
© www.soinside.com 2019 - 2024. All rights reserved.