package com.example.gdsports.step.service;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Binder;
import android.os.Build;
import android.os.CountDownTimer;
import android.os.IBinder;
import android.util.Log;
import androidx.core.app.NotificationCompat;
import com.example.gdsports.R;
import com.example.gdsports.step.UpdateUiCallBack;
import com.example.gdsports.step.accelerometer.StepCount;
import com.example.gdsports.step.accelerometer.StepValuePassListener;
import com.example.gdsports.step.bean.StepData;
import com.example.gdsports.step.utils.DbUtils;
import com.example.gdsports.ui.activity.steps.StepActivity;
import com.orhanobut.logger.Logger;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class StepService extends Service implements SensorEventListener {
private static final CharSequence CHANNEL_ONE_NAME ="one" ;
private static final String CHANNEL_ONE_ID ="com.example.gdsports";
private String TAG = "StepService";
/**
* 默认为30秒进行一次存储
*/
private static int duration = 30 * 1000;
/**
* 当前的日期
*/
private static String CURRENT_DATE = "";
/**
* 传感器管理对象
*/
private SensorManager sensorManager;
/**
* 广播接受者
*/
private BroadcastReceiver mBatInfoReceiver;
/**
* 保存记步计时器
*/
private TimeCount time;
/**
* 当前所走的步数
*/
private int CURRENT_STEP;
/**
* 计步传感器类型 Sensor.TYPE_STEP_COUNTER或者Sensor.TYPE_STEP_DETECTOR
*/
private static int stepSensorType = -1;
/**
* 每次第一次启动记步服务时是否从系统中获取了已有的步数记录
*/
private boolean hasRecord = false;
/**
* 系统中获取到的已有的步数
*/
private int hasStepCount = 0;
/**
* 上一次的步数
*/
private int previousStepCount = 0;
/**
* 通知管理对象
*/
private NotificationManager mNotificationManager;
/**
* 加速度传感器中获取的步数
*/
private StepCount mStepCount;
/**
* IBinder对象,向Activity传递数据的桥梁
*/
private StepBinder stepBinder = new StepBinder();
/**
* 通知构建者
*/
private NotificationCompat.Builder mBuilder;
@Override
public void onCreate() {
super.onCreate();
//startNotificationForeground();
Log.d(TAG, "onCreate()");
initNotification();
initTodayData();
initBroadcastReceiver();
new Thread(new Runnable() {
public void run() {
startStepDetector();
}
}).start();
startTimeCount();
}
/**
* 获取当天日期
*
* @return
*/
private String getTodayDate() {
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(date);
}
/**
* 初始化通知栏
*/
private void initNotification() {
String CHANNEL_ONE_ID = "com.primedu.cn";
String CHANNEL_ONE_NAME = "Channel One";
NotificationChannel notificationChannel = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notificationChannel = new NotificationChannel(CHANNEL_ONE_ID,
CHANNEL_ONE_NAME, NotificationManager.IMPORTANCE_HIGH);
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.RED);
notificationChannel.setShowBadge(true);
notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.createNotificationChannel(notificationChannel);
}
mBuilder = new NotificationCompat.Builder(this);
mBuilder.setContentTitle(getResources().getString(R.string.app_name))
.setContentText("今日步数" + CURRENT_STEP + " 步").setChannelId(CHANNEL_ONE_ID)
.setContentIntent(getDefalutIntent(Notification.FLAG_ONGOING_EVENT))
.setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示
.setPriority(Notification.PRIORITY_DEFAULT)//设置该通知优先级
.setAutoCancel(false)//设置这个标志当用户单击面板就可以让通知将自动取消
.setOngoing(true)//ture,设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
.setSmallIcon(R.mipmap.logo);
Notification notification = mBuilder.build();
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
startForeground(notifyId_Step, notification);
Log.d(TAG, "initNotification()");
}
/**
* 初始化当天的步数
*/
private void initTodayData() {
CURRENT_DATE = getTodayDate();
DbUtils.createDb(this, "DylanStepCount");
DbUtils.getLiteOrm().setDebugged(false);
//获取当天的数据,用于展示
List<StepData> list = DbUtils.getQueryByWhere(StepData.class, "today", new String[]{CURRENT_DATE});
if (list.size() == 0 || list.isEmpty()) {
CURRENT_STEP = 0;
} else if (list.size() == 1) {
Log.v(TAG, "StepData=" + list.get(0).toString());
CURRENT_STEP = Integer.parseInt(list.get(0).getStep());
} else {
Log.v(TAG, "出错了!");
}
if (mStepCount != null) {
mStepCount.setSteps(CURRENT_STEP);
}
updateNotification();
}
/**
* 注册广播
*/
private void initBroadcastReceiver() {
final IntentFilter filter = new IntentFilter();
// 屏幕灭屏广播
filter.addAction(Intent.ACTION_SCREEN_OFF);
//关机广播
filter.addAction(Intent.ACTION_SHUTDOWN);
// 屏幕亮屏广播
filter.addAction(Intent.ACTION_SCREEN_ON);
// 屏幕解锁广播
// filter.addAction(Intent.ACTION_USER_PRESENT);
// 当长按电源键弹出“关机”对话或者锁屏时系统会发出这个广播
// example:有时候会用到系统对话框,权限可能很高,会覆盖在锁屏界面或者“关机”对话框之上,
// 所以监听这个广播,当收到时就隐藏自己的对话,如点击pad右下角部分弹出的对话框
filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
//监听日期变化
filter.addAction(Intent.ACTION_DATE_CHANGED);
filter.addAction(Intent.ACTION_TIME_CHANGED);
filter.addAction(Intent.ACTION_TIME_TICK);
mBatInfoReceiver = new BroadcastReceiver() {
@Override
public void onReceive(final Context context, final Intent intent) {
String action = intent.getAction();
if (Intent.ACTION_SCREEN_ON.equals(action)) {
Log.d(TAG, "screen on");
} else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
Log.d(TAG, "screen off");
//改为60秒一存储
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Android本科毕业设计基于Android的健康计步系统app源码(高分项目).zip已获导师指导并通过的高分毕业设计项目,也可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 Android本科毕业设计基于Android的健康计步系统app源码(高分项目).zip已获导师指导并通过的高分毕业设计项目,也可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 Android本科毕业设计基于Android的健康计步系统app源码(高分项目).zip已获导师指导并通过的高分毕业设计项目,也可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。本资源中的源码都是经过本地编译过
资源推荐
资源详情
资源评论
收起资源包目录
Android本科毕业设计基于Android的健康计步系统app源码(高分项目).zip (310个子文件)
gradlew.bat 2KB
china_city.db 179KB
login_button.gif 3KB
psd.gif 1KB
account.gif 1KB
.gitignore 208B
.gitignore 7B
build.gradle 3KB
build.gradle 607B
settings.gradle 58B
gradlew 5KB
QWeather_Plugin_SDK_Android_V1.5.jar 126KB
lite-orm-1.7.0.jar 120KB
gradle-wrapper.jar 53KB
StepService.java 23KB
mapActivity.java 19KB
mapActivity.java 19KB
ProfileFragment.java 15KB
firstUseActivity.java 11KB
FindPassword.java 10KB
HeartActivity.java 10KB
Register.java 10KB
ZealotDBOpenHelper.java 10KB
TabFragmentHost.java 10KB
LocationService.java 10KB
StepArcView.java 10KB
UserActivity.java 8KB
WeatherActivity.java 8KB
Login.java 8KB
MainActivity.java 8KB
OtherFragment.java 8KB
ToastUtil.java 8KB
ChartActivity.java 7KB
StepDetector.java 6KB
StepActivity.java 6KB
SetPlanActivity.java 5KB
SettingActivity.java 5KB
LogActivity.java 4KB
MessageFragment.java 4KB
LogFragment.java 4KB
AboutActivity.java 4KB
HeartRateView.java 4KB
StepDetector.java 4KB
PointerView.java 3KB
SharedPreferencesUtils.java 3KB
CountDownTimer.java 3KB
DbUtils.java 3KB
RingFragment.java 3KB
JopFragmet.java 3KB
RunFragment.java 3KB
RunResultActivity.java 3KB
HistoryActivity.java 3KB
DBManager.java 3KB
LogAdapter.java 3KB
SharedPreferenceUtil.java 2KB
StepCount.java 2KB
Util.java 2KB
StepsDetectService.java 2KB
MotionTyprFragmet.java 2KB
RunRecord.java 2KB
ImageProcessing.java 2KB
DateUtil.java 2KB
StudentDBOpenHelper.java 2KB
CountDownActivity.java 1KB
StepCountModeDispatcher.java 1KB
CommonAdapter.java 1KB
DataUtil.java 1KB
Check.java 1KB
StepData.java 1KB
CommonViewHolder.java 1016B
CrashHandler.java 951B
GlobalUtil.java 868B
MyUser.java 821B
ExampleInstrumentedTest.java 756B
SubFragment2.java 738B
SubFragment1.java 738B
SubFragment3.java 717B
NetUtil.java 589B
User_Table.java 502B
BaseApplication.java 453B
CopassActivity.java 418B
DayRecord.java 402B
ExampleUnitTest.java 381B
Constant.java 257B
UpdateUiCallBack.java 246B
MyApplication.java 239B
Util.java 238B
StepValuePassListener.java 166B
StepCountListener.java 151B
StepListener.java 99B
sport.jpeg 47KB
weather_first.jpg 95KB
about_img.jpg 79KB
nav_header.jpg 65KB
background.jpg 55KB
.name 8B
background.png 850KB
bg_create_group.png 263KB
bg.png 257KB
icon_zealot_foreground.png 118KB
共 310 条
- 1
- 2
- 3
- 4
资源评论
不安分的小女孩
- 粉丝: 9642
- 资源: 2246
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功