首先,我必须说,我是一个新手在磨损操作系统编程(而且很少了解Java编程的一般:( )。
我想在更改日期时(每当午夜触发更改或用户设置新日期时)进行复杂的更新。我成功地在清单中使用<action android:name="android.intent.action.DATE_CHANGED"/>
实现了它,并在主代码中注册了一个BroadCastReceiver。
下一步是复杂的实现(独立于任何观察面),这就是我被困在这里的地方。根据android.support.wearable.complications.UPDATE_PERIOD_SECONDS
in intent-filter
,我设法编写了一个复杂的定期更新,但是经过几天的搜索,我找不到一种方法来捕捉有关日期更改的广播消息,以更新复杂的数据。
我试图在提供程序的BroadCast中注册一个onComplicationActivated
接收器(比如活动),但是这个方法似乎从来没有被调用过(这是由日志调试模式确认的)。我还有一个类,它用一个空的BroadcastReceiver方法(只有日志操作)扩展‘onReceive
’,这个类似乎完全没有被调用.
因此,我想知道什么是能够捕获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中使用了一个模拟器。
非常感谢你的帮助!
发布于 2022-07-07 04:26:57
你应该在舱单上注册你的广播接收器。
<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://stackoverflow.com/questions/72889579
复制相似问题