android实现1.界面显示友邻社交标题栏和帖子列表,动态列表项包括图片、发布人和点赞数,点击列表项进入帖子详情。 2.帖子详情界面显示标题栏、发布人、发布时间、发布内容和用户评论,用户评论包括评论总数、发布评论的用户头像、昵称、发布日期、评论点赞数和评论内容,界面底部显示发表评论输入框和发布按钮,输入评论内容并点击发布按钮即可发布评论
1 . 主动获取充电状态流程 :
① 创建 IntentFilter : 创建 IntentFilter , 并为其设置 Intent.ACTION_BATTERY_CHANGED 意图 ;
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
② 注册广播接受者 : 调用 Context 对象的 registerReceiver 方法 , 设置 BroadcastReceiver receiver 广播接收者参数为空 , IntentFilter 就是上述创建的意图过滤器 ;
Intent intent = context.registerReceiver(null, intentFilter);
③ 获取充电状态 : 从注册广播返回的 Intent 意图中获取对应的充电状态 ;
int batteryChargeState = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
④ 对比充电状态 : 将上述从 Intent.ACTION_BATTERY_CHANGED 匹配的意图中获取 BatteryManager.EXTRA_PLUGGED 对应的值 , 与以下 333 个值进行对比 , 如果一致 , 说明当前是此种充电状态 ;
2 . 广播接受者注册用法 :
① 注册广播接收者 : registerReceiver 方法主要作用是在主线程注册一个广播接收者 BroadcastReceiver 运行 ;
② 广播接收者调用 : 当注册的 IntentFilter 中的 action 匹配到相应的广播时 , BroadcastReceiver 会被在主线程调用 ;
③ 历史广播保存 : 系统发送完毕的广播 , 会被保存下来 , 在后续注册时发送 ;
④ 广播复用机制 : 一旦有广播接收者注册广播 , 如果之前发送完毕的广播与本次注册的 IntentFilter 意图的 Action 匹配 , 次函数就会返回一个 Intent , 这个 Intent 就是之前已经发送的广播 ;
⑤ 如 : 本次注册的 IntentFilter 中包含 Intent.ACTION_BATTERY_CHANGED , 如果使用如下方法 context.registerReceiver(null, intentFilter) 注册空广播接收者 , 返回值就是之前发送过的 Intent.ACTION_BATTERY_CHANGED 广播 , 可以从该广播中获取对应的充电状态变化数据 ;
⑥ 注册多个意图 : 如果在 IntentFilter 中注册多个意图 , 广播接收者如果不为空 , 则会处理每一个意图 , 但是返回值只能返回一个意图 , 返回哪个由系统决定 ;
广播接收者注册方法有两种功能 , 一个是注册广播接收者 , 另一个是获取之前已经发送的相同 Action 的历史广播 ;
这里使用的注册广播接收者的获取历史广播的功能 ;
3 . 代码示例 :
package kim.hsl.bp;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
public class BatteryUtils {
/**
* 主动获取当前电池是否在充电 , 即数据线是否插在手机上
* @return
*/
public static boolean isBatteryCharging(Context context){
boolean isBatteryCharging = false;
// 主动发送包含是否正在充电状态的广播 , 该广播会持续发送
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
// 注册广播接受者
Intent intent = context.registerReceiver(null, intentFilter);
// 获取充电状态
int batteryChargeState = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
// 判定是否是 AC 交流电充电
boolean isAc = batteryChargeState == BatteryManager.BATTERY_PLUGGED_AC;
// 判断是否是 USB 充电
boolean isUsb = batteryChargeState == BatteryManager.BATTERY_PLUGGED_USB;
// 判断是否是 无线充电
boolean isWireless = batteryChargeState == BatteryManager.BATTERY_PLUGGED_WIRELESS;
// 如何上述任意一种为 true , 说明当前正在充电
isBatteryCharging = isAc || isUsb || isWireless;
return isBatteryCharging;
}
}
参考:https://peakchen.blog.csdn.net/article/details/131608605?spm=1001.2014.3001.5502
可以去github 找找demo,很容易就能找到相关demo