AndroidX中ComplicationManager依赖错误及应用启动实现求助
解决方案
1. 修正依赖声明
将应用级build.gradle中的依赖替换为Complication数据源专用的AndroidX库:
dependencies { implementation "androidx.wear.watchface:watchface-complications-data-source:1.2.1" // 建议使用最新稳定版本 // 保留其他原有依赖 }
2. 替换旧版导入语句
将代码中基于Support库的导入全部替换为AndroidX对应包:
// 替换前 import android.support.wearable.complications.ComplicationManager import android.support.wearable.complications.ComplicationProviderService import android.support.wearable.complications.ComplicationData // 替换后 import androidx.wear.watchface.complications.datasource.ComplicationProviderService import androidx.wear.watchface.complications.data.ComplicationManager import androidx.wear.watchface.complications.data.ComplicationData import androidx.wear.watchface.complications.data.ComplicationData.Companion.TYPE_LAUNCH_APP
3. 调整常量引用方式
AndroidX中TYPE_LAUNCH_APP属于ComplicationData的伴生对象常量,需修正代码中的引用:
将ComplicationData.TYPE_LAUNCH_APP改为TYPE_LAUNCH_APP(已通过静态导入),或直接写ComplicationData.Companion.TYPE_LAUNCH_APP。
4. 验证Manifest服务配置
确保AndroidManifest.xml中正确声明Complication服务:
<service android:name=".AppLauncherComplicationProviderService" android:exported="true"> <intent-filter> <action android:name="androidx.wear.watchface.complications.datasource.action.COMPLICATION_UPDATE_REQUEST" /> </intent-filter> <meta-data android:name="androidx.wear.watchface.complications.datasource.SUPPORTED_TYPES" android:value="4" /> <!-- TYPE_LAUNCH_APP的数值为4 --> </service>
最终修正后的代码片段
import android.content.ComponentName import android.content.Intent import android.util.Log import androidx.wear.watchface.complications.data.ComplicationData import androidx.wear.watchface.complications.data.ComplicationManager import androidx.wear.watchface.complications.data.ComplicationData.Companion.TYPE_LAUNCH_APP import androidx.wear.watchface.complications.datasource.ComplicationProviderService import android.app.PendingIntent import android.graphics.drawable.Icon class AppLauncherComplicationProviderService : ComplicationProviderService() { private val TAG = "AppLauncherComplication" override fun onComplicationActivated( complicationId: Int, type: Int, watchFaceComponent: ComponentName ) { Log.d(TAG, "onComplicationActivated(): $complicationId, type: $type, component: $watchFaceComponent") } override fun onComplicationDeactivated(complicationId: Int) { Log.d(TAG, "onComplicationDeactivated(): $complicationId") } override fun onComplicationUpdate( complicationId: Int, dataType: Int, complicationManager: ComplicationManager ) { Log.d(TAG, "onComplicationUpdate(): $complicationId, type: $dataType") if (dataType == TYPE_LAUNCH_APP) { val launchIntent = Intent(Intent.ACTION_MAIN) .addCategory(Intent.CATEGORY_LAUNCHER) .setComponent(ComponentName( "com.example.my_target_app", "com.example.my_target_app.MainActivity" )) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) val tapAction = PendingIntent.getActivity( this, 0, launchIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) val complicationData = ComplicationData.Builder(TYPE_LAUNCH_APP) .setIcon( Icon.createWithResource( this, R.drawable.ic_app_launcher ) ) .setShortTitle(getString(R.string.app_name_launcher)) .setTapAction(tapAction) .build() complicationManager.updateComplicationData(complicationId, complicationData) } else { complicationManager.noUpdateRequired(complicationId) } } }
内容的提问来源于stack exchange,提问作者John Poust
相关产品推荐
相关产品推荐

