首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android系统在日期更改时的复杂情况更新

Android系统在日期更改时的复杂情况更新
EN

Stack Overflow用户
提问于 2022-07-06 20:36:21
回答 1查看 95关注 0票数 3

首先,我必须说,我是一个新手在磨损操作系统编程(而且很少了解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信息的好方法。

谢谢你的帮忙!

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

谢谢你的回复!

我已经按建议试过了,但仍然不起作用。我不明白我失败的地方,因为解释很清楚.

到目前为止,我正在尝试在日期更改上显示一个随机数。

清单如下:

代码语言:javascript
运行
复制
<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>

关于提供者:

代码语言:javascript
运行
复制
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();
    }
}
}

最后,接受者:

代码语言:javascript
运行
复制
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中使用了一个模拟器。

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2022-07-07 04:26:57

你应该在舱单上注册你的广播接收器。

代码语言:javascript
运行
复制
<receiver android:name=".Receiver">
    <intent-filter>
        <action android:name="android.intent.action.DATE_CHANGED" />
    </intent-filter>
</receiver>

然后启动一个ComplicationDataSourceUpdateRequester更新。

代码语言:javascript
运行
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72889579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档