[英]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();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.