Селектор Watch Face Complication никогда не показывал

Я пытаюсь реализовать услугу поддержки моих часов. Вот мой AndroidManifest.

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.wearapp">

    <uses-feature android:name="android.hardware.type.watch"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="com.google.android.wearable.permission.RECEIVE_COMPLICATION_DATA"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@android:style/Theme.DeviceDefault">

        <!-- Watch Face -->

        <service
            android:name=".ComplicationSimpleWatchFaceService"
            android:enabled="true"
            android:label="Fancy Watch"
            android:permission="android.permission.BIND_WALLPAPER">
            <meta-data
                android:name="android.service.wallpaper"
                android:resource="@xml/watch_face"/>
            <meta-data
                android:name="com.google.android.wearable.watchface.preview"
                android:resource="@drawable/preview_complication_simple"/>
            <meta-data
                android:name="com.google.android.wearable.watchface.preview_circular"
                android:resource="@drawable/preview_complication_simple"/>
            <meta-data
                android:name="com.google.android.wearable.watchface.wearableConfigurationAction"
                android:value="com.example.wearapp.CONFIG_COMPLICATION_SIMPLE"/>

            <intent-filter>
                <action android:name="android.service.wallpaper.WallpaperService"/>

                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE"/>
            </intent-filter>
        </service>

        <activity android:name="android.support.wearable.complications.ComplicationHelperActivity"/>
        <activity
            android:name=".ComplicationSimpleConfigActivity"
            android:label="Fancy Watch">
            <intent-filter>
                <action android:name="com.example.wearapp.CONFIG_COMPLICATION_SIMPLE"/>

                <category android:name="com.google.android.wearable.watchface.category.WEARABLE_CONFIGURATION"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

    </application>

</manifest>

У меня есть служба наблюдения за лицом и действия конфигурации. Когда я использую ComplicationHelperActivity для создания ProviderChooserHelperIntent из действия конфигурации, я всегда получаю результат, отмененный в onActivityResult. Вот как я начинаю выбирать работу и слушаю результат

   @Override
        public void onClick(WearableListView.ViewHolder viewHolder) {
            if (Log.isLoggable(TAG, Log.DEBUG)) {
                Log.d(TAG, "onClick()");
            }

            Integer tag = (Integer) viewHolder.itemView.getTag();
            ComplicationItem complicationItem = mAdapter.getItem(tag);

            startActivityForResult(ComplicationHelperActivity.createProviderChooserHelperIntent(
                            getApplicationContext(),
                            complicationItem.watchFace,
                            complicationItem.complicationId,
                            complicationItem.supportedTypes),
                    PROVIDER_CHOOSER_REQUEST_CODE);
        }


       @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == PROVIDER_CHOOSER_REQUEST_CODE
                    && resultCode == RESULT_OK) {
                ComplicationProviderInfo complicationProviderInfo =
                   data.getParcelableExtra(ProviderChooserIntent.EXTRA_PROVIDER_INFO);
                Log.d(TAG, "Selected Provider: " + complicationProviderInfo);
                finish();
            }
        }

Кажется, мне не хватает поддержки усложнения, и поэтому не могу выбрать ни одного поставщика. Но чтобы проверить это, я скопировал ComplicationSimpleWatchFaceService из образца WatchFace и до сих пор не дал никакого результата. Вот код усложнения от циферблата.

  private static final int LEFT_DIAL_COMPLICATION = 0;
    private static final int RIGHT_DIAL_COMPLICATION = 1;

    public static final int[] COMPLICATION_IDS = {LEFT_DIAL_COMPLICATION, RIGHT_DIAL_COMPLICATION};

    public static final int[][] COMPLICATION_SUPPORTED_TYPES = {
            {ComplicationData.TYPE_SHORT_TEXT},
            {ComplicationData.TYPE_SHORT_TEXT}
    };


    private void initializeComplication() {
            if (Log.isLoggable(TAG, Log.DEBUG)) {
                Log.d(TAG, "initializeComplications()");
            }
            mActiveComplicationDataSparseArray = new SparseArray<>(COMPLICATION_IDS.length);

            mComplicationPaint = new Paint();
            mComplicationPaint.setColor(Color.WHITE);
            mComplicationPaint.setTextSize(COMPLICATION_TEXT_SIZE);
            mComplicationPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD));
            mComplicationPaint.setAntiAlias(true);

            setActiveComplications(COMPLICATION_IDS);
        }

1 ответ

Убедитесь, что вы позвонили ComplicationHelperActivity.createProviderChooserHelperIntent метод, чтобы получить намерение и начать выбор провайдера.

Пример кода (не забудьте позвонить getActivity() способ его запуска):

startActivityForResult(
  ComplicationHelperActivity.createProviderChooserHelperIntent(
     getActivity(),
     watchFace,
     complicationId,
     ComplicationData.TYPE_LARGE_IMAGE),
  PROVIDER_CHOOSER_REQUEST_CODE);

Намерение может быть использовано с startActivity или же startActivityForResult запустить селектор.

Вы можете следовать этому руководству и посмотреть, пропустили ли вы некоторые конфигурации.

Другие вопросы по тегам