gpt4 book ai didi

android - 如何仅在 wifi 状态发生变化时更新小部件?

转载 作者:行者123 更新时间:2023-11-30 03:35:55 25 4
gpt4 key购买 nike

正在关注 this教程 我快速创建了一个简单的小部件,它在主屏幕上每秒显示和更新当前时间:

enter image description here

问题:我想知道如何更改此代码,以便仅在特定事件发生时更新时间。例如:仅当 wifi 状态发生变化时才更新时间

以下是(希望如此)相关的代码部分:

<!--  Broadcast Receiver -->
<receiver android:name=".WifiSSIDWidget" android:label="@string/app_name">
<intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/wifi_ssid_widget_provider" />
</receiver>

这是小部件类代码:

public class HelloWidget extends AppWidgetProvider {

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1, 1000);
}

private class MyTime extends TimerTask {
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
DateFormat format = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM, Locale.getDefault());

public MyTime(Context context, AppWidgetManager appWidgetManager) {
this.appWidgetManager = appWidgetManager;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
thisWidget = new ComponentName(context, HelloWidget.class);
}

@Override
public void run() {
remoteViews.setTextViewText(R.id.widget_textview, "TIME = " +format.format(new Date()));
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}

}
}

最佳答案

要在某个事件发生时触发,您可以在 list 文件中创建一个广播接收器(请注意,并非所有事件都会触发,例如:收到的短信可以,但发送的短信不能)。

这是网络状态更改的示例。

1) 创建广播接收器:

public class NetworkStateChangeReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

Log.i(TAG, "Receive Network State Change");

// you put your main code here.
// or if you don't want, put your code to service. So, run following code
Intent myIntent = new Intent(context, NetworkStateChangeService .class);
// put all intent data to this intent
myIntent.putExtras(intent);
WakefulIntentService.sendWakefulWork(context, myIntent);

}
}

2) 此广播接收器将运行来自 NetworkStateChangeService 的代码。下面是NetworkStateChangeService的主要代码:

public class NetworkStateChangeService extends WakefulIntentService {

public static String TAG = "SMS Service";

public NetworkStateChangeService() {
super("Network state change");
}

public SMSReceivedService(String name) {
super(name);
}

@Override
protected void doWakefulWork(Intent intent) {
// put your main code here
}
}

注意:WakefulIntentServicecommonsguy 发明的自定义类

3) 您在 list 文件中注册您的接收器和服务:

    <receiver android:name="NetworkStateChangeReceiver "> 
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>

<service
android:name="NetworkStateChangeService">
</service>

如果你想使用Broastcast Receiver,上面是经常使用的框架。正如你看到的一些其他更简单的教程,他们只是将主要代码放在 broadcast receiveronreceive 中,但是如果你的工作需要很长时间,你应该投入服务,并且应该使用WakefulIntentService 因为它可以帮助您在工作时唤醒设备。

关于android - 如何仅在 wifi 状态发生变化时更新小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16651599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com