我使用内置的 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 }
是否有使用广播接收器?如果您只想在同一个包中启动一个 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()