簡體   English   中英

Android Wear 並發症更新日期更改

[英]Android wear complication update on date change

首先,我不得不說我在 Wear OS 編程方面是一個新手(而且對 Java 編程的一般知識很少:( )。

我想在日期更改時進行更新(每當在午夜觸發更改或用戶設置新日期時)。 我成功地設法在清單中使用<action android:name="android.intent.action.DATE_CHANGED"/>的活動中實現它,並在主代碼中注冊了 BroadCastReceiver。

下一步是實現復雜化(獨立於任何表盤),這就是我卡住的地方。 我設法根據intent-filter中的android.support.wearable.complications.UPDATE_PERIOD_SECONDS定期編寫復雜更新,但經過幾天的搜索,我找不到一種方法來捕捉有關更新復雜數據的日期更改的廣播消息。

我試圖在提供者的onComplicationActivated中注冊廣播接收器(如活動),但似乎從未調用過該方法(由調試模式下的登錄確認)。 我還有一個類,它使用一個空的onReceive方法(僅記錄操作)來擴展“BroadcastReceiver”,這似乎也根本沒有被調用......

因此,我想知道能夠捕獲 Date_Changed 信息的好方法是什么......

謝謝你的幫助!

==================================================== ===================

感謝您的回復!

我按照建議嘗試了,但仍然無法正常工作。 我不明白我失敗的地方,因為解釋很清楚......

到目前為止,我正在嘗試在日期更改時顯示一個隨機數。

清單如下:

<uses-feature android:name="android.hardware.type.watch" />

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

    <meta-data
        android:name="com.google.android.wearable.standalone"
        android:value="true" />

    <service
        android:name=".MickProviderService"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/complic_label"
        android:exported="true"
        android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
        <intent-filter>
            <action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST"/>
        </intent-filter>

        <meta-data
            android:name="android.support.wearable.complications.SUPPORTED_TYPES"
            android:value="LONG_TEXT"/>

        <meta-data
            android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
            android:value="0" />

    </service>

    <receiver android:name=".MickReceiver"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.DATE_CHANGED" />
        </intent-filter>
    </receiver>

</application>

關於提供者:

public class MickProviderService extends ComplicationProviderService {

@Nullable
@Override
public ComplicationData getPreviewData(@NonNull ComplicationType complicationType) {

    ComplicationData comp_data;
    final LongTextComplicationData.Builder builder = new LongTextComplicationData.Builder(
            new PlainComplicationText.Builder("coucou !").build(),
            new PlainComplicationText.Builder("Long Text=.").build()
    );
    comp_data = builder.build();

    return comp_data;
}


@Override
public void onComplicationRequest(@NonNull ComplicationRequest complicationRequest, @NonNull ComplicationRequestListener complicationRequestListener) {
    Log.d("MickProviderService", "Request");

    double num = new Random().nextInt(61) + 20;
    String text = String.valueOf(num);

    ComplicationData comp_data;
    final LongTextComplicationData.Builder builder = new LongTextComplicationData.Builder(
            new PlainComplicationText.Builder(text).build(),
            new PlainComplicationText.Builder("Long Text=.").build()
    );

    comp_data = builder.build();


    //envoi de la donnée au système
    try {
        complicationRequestListener.onComplicationData(comp_data);
    } catch (RemoteException e) {
        e.printStackTrace();
    }
}
}

最后是接收器:

public class MickReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent i) {
    Log.d("MickFeteReceiver", "DATE CHANGE");
    if (i.getAction().equals(Intent.ACTION_DATE_CHANGED)){

        ComponentName component = new ComponentName(context.getApplicationContext(),MickProviderService.class);

        ComplicationDataSourceUpdateRequester request = ComplicationDataSourceUpdateRequester.create(
                context, component);
        request.requestUpdateAll();
    }
}
}

調試沒有顯示接收者的日志消息...我不知道它是否值得注意,但我在 Android Studio 中使用了一個模擬器。

非常感謝你的幫助!

您應該在清單中注冊您的廣播接收器。

<receiver android:name=".Receiver">
    <intent-filter>
        <action android:name="android.intent.action.DATE_CHANGED" />
    </intent-filter>
</receiver>

然后觸發 ComplicationDataSourceUpdateRequester 更新。

public class Receiver extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent i) {
       if (i.getAction().equals(Intent.ACTION_DATE_CHANGED) {
            ComplicationDataSourceUpdateRequester request = ComplicationDataSourceUpdateRequester.create(
                applicationContext, ComponentName(
                    applicationContext, RememberWearComplicationProviderService.class
                )
            );
            request.requestUpdateAll();
       }
   }
}

請參閱https://developer.android.com/reference/androidx/wear/watchface/complications/datasource/ComplicationDataSourceUpdateRequester

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM