Commit c7aa6d82adba44c030dad9ca974bfd64fe87755e
1 parent
8ce409e8
1.对接运动赛事详情页接口
2.新增接口签名验证
Showing
9 changed files
with
405 additions
and
29 deletions
moudle_pedometer/src/main/AndroidManifest.xml
| ... | ... | @@ -61,10 +61,6 @@ |
| 61 | 61 | <activity android:name="com.cnlive.moudle.pedometer.ui.activity.RegistrationInfoActivity" /> |
| 62 | 62 | |
| 63 | 63 | <service |
| 64 | - android:name="com.baidu.location.f" | |
| 65 | - android:enabled="true" | |
| 66 | - android:process=":remote" /> | |
| 67 | - <service | |
| 68 | 64 | android:name="com.cnlive.moudle.pedometer.service.StepService" |
| 69 | 65 | android:enabled="true" |
| 70 | 66 | android:exported="true" |
| ... | ... | @@ -98,6 +94,25 @@ |
| 98 | 94 | </intent-filter> |
| 99 | 95 | </service> |
| 100 | 96 | |
| 97 | + <service | |
| 98 | + android:name="com.cnlive.moudle.pedometer.service.KeepLiveService" | |
| 99 | + android:enabled="true" | |
| 100 | + android:exported="true" | |
| 101 | + android:priority="1000" | |
| 102 | + android:process=":re" /> | |
| 103 | + | |
| 104 | + <receiver | |
| 105 | + android:name="com.cnlive.moudle.pedometer.receivers.ServiceReceiver" | |
| 106 | + android:enabled="true" | |
| 107 | + android:exported="true"> | |
| 108 | + <intent-filter android:priority="1000"> | |
| 109 | + <action android:name="com.cnlive.strike.receiver.ServiceReceiver" /> | |
| 110 | + <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> | |
| 111 | + <action android:name="android.net.wifi.STATE_CHANGE" /> | |
| 112 | + <action android:name="com.example.myservice.MyReceiver" /> | |
| 113 | + </intent-filter> | |
| 114 | + </receiver> | |
| 115 | + | |
| 101 | 116 | <activity |
| 102 | 117 | android:name="com.cnlive.moudle.pedometer.ui.activity.PedometerMainActivity" |
| 103 | 118 | android:launchMode="singleTask" | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/view/CollRunRaceDetailFragmentView.java
| ... | ... | @@ -196,11 +196,12 @@ public class CollRunRaceDetailFragmentView implements MvpView, SensorEventListen |
| 196 | 196 | //设置活动地点 |
| 197 | 197 | if (!TextUtils.isEmpty(runRaceDetailInfo.getAddress())) { |
| 198 | 198 | fragment.binding.includeStreet.tvAddress.setText(runRaceDetailInfo.getAddress()); |
| 199 | + //设置活动距离 | |
| 200 | + if (!TextUtils.isEmpty(runRaceDetailInfo.getMileage())) { | |
| 201 | + fragment.binding.includeStreet.tvAddress.append("\t\t" + runRaceDetailInfo.getMileage()); | |
| 202 | + } | |
| 199 | 203 | } |
| 200 | - //设置活动距离 | |
| 201 | - if (!TextUtils.isEmpty(runRaceDetailInfo.getMileage())) { | |
| 202 | - fragment.binding.includeStreet.tvMileage.setText(runRaceDetailInfo.getMileage()); | |
| 203 | - } | |
| 204 | + | |
| 204 | 205 | //设置起点 |
| 205 | 206 | if (!TextUtils.isEmpty(runRaceDetailInfo.getStartLocation())) { |
| 206 | 207 | fragment.binding.includeStreet.tvStartAddr.setText(runRaceDetailInfo.getStartLocation()); | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/commonInfo/CommonInfo.java
| ... | ... | @@ -70,6 +70,26 @@ public class CommonInfo { |
| 70 | 70 | } |
| 71 | 71 | |
| 72 | 72 | /** |
| 73 | + * 设置是否运行保活服务 | |
| 74 | + * | |
| 75 | + * @param context | |
| 76 | + * @param isAllow | |
| 77 | + */ | |
| 78 | + public static void setIsRunKeepAliveService(Context context, boolean isAllow) { | |
| 79 | + MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).putBoolean("KeepAliveService", isAllow); | |
| 80 | + | |
| 81 | + } | |
| 82 | + | |
| 83 | + /** | |
| 84 | + * 获取是否运行保活服务 | |
| 85 | + * | |
| 86 | + * @param context | |
| 87 | + */ | |
| 88 | + public static boolean getIsRunKeepAliveService(Context context) { | |
| 89 | + return MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).getBoolean("KeepAliveService", false); | |
| 90 | + } | |
| 91 | + | |
| 92 | + /** | |
| 73 | 93 | * 获取是否运行计步服务 |
| 74 | 94 | * |
| 75 | 95 | * @param context |
| ... | ... | @@ -97,6 +117,25 @@ public class CommonInfo { |
| 97 | 117 | return MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).getString("streetId", ""); |
| 98 | 118 | } |
| 99 | 119 | |
| 120 | + /** | |
| 121 | + * 设置是否运行鹰眼服务 | |
| 122 | + * | |
| 123 | + * @param context | |
| 124 | + * @param isRun | |
| 125 | + */ | |
| 126 | + public static void setTsRunBaiduTraceService(Context context, boolean isRun) { | |
| 127 | + MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).putBoolean("RunBaiduTraceService", isRun); | |
| 128 | + } | |
| 129 | + | |
| 130 | + /** | |
| 131 | + * 获取是否运行鹰眼服务 | |
| 132 | + * | |
| 133 | + * @param context | |
| 134 | + */ | |
| 135 | + public static boolean getIsRunBaiduTraceService(Context context) { | |
| 136 | + return MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).getBoolean("RunBaiduTraceService", false); | |
| 137 | + } | |
| 138 | + | |
| 100 | 139 | /*重置 |
| 101 | 140 | * @param context |
| 102 | 141 | */ | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunRaceDetailFragmentView.java
| ... | ... | @@ -205,11 +205,12 @@ public class RunRaceDetailFragmentView implements MvpView, SensorEventListener { |
| 205 | 205 | //设置活动地点 |
| 206 | 206 | if (!TextUtils.isEmpty(runRaceDetailInfo.getAddress())) { |
| 207 | 207 | fragment.binding.includeStreet.tvAddress.setText(runRaceDetailInfo.getAddress()); |
| 208 | + //设置活动距离 | |
| 209 | + if (!TextUtils.isEmpty(runRaceDetailInfo.getMileage())) { | |
| 210 | + fragment.binding.includeStreet.tvAddress.append("\t\t"+runRaceDetailInfo.getMileage()); | |
| 211 | + } | |
| 208 | 212 | } |
| 209 | - //设置活动距离 | |
| 210 | - if (!TextUtils.isEmpty(runRaceDetailInfo.getMileage())) { | |
| 211 | - fragment.binding.includeStreet.tvMileage.setText(runRaceDetailInfo.getMileage()); | |
| 212 | - } | |
| 213 | + | |
| 213 | 214 | //设置起点 |
| 214 | 215 | if (!TextUtils.isEmpty(runRaceDetailInfo.getStartLocation())) { |
| 215 | 216 | fragment.binding.includeStreet.tvStartAddr.setText(runRaceDetailInfo.getStartLocation()); |
| ... | ... | @@ -255,6 +256,10 @@ public class RunRaceDetailFragmentView implements MvpView, SensorEventListener { |
| 255 | 256 | if (!TextUtils.isEmpty(runRaceDetailInfo.getUserMileage())) { |
| 256 | 257 | //显示 |
| 257 | 258 | fragment.binding.includePersonScore.llPersonScoreRoot.setVisibility(View.VISIBLE); |
| 259 | + //设置完成人数 | |
| 260 | + if (!TextUtils.isEmpty(runRaceDetailInfo.getFinishNum())){ | |
| 261 | + fragment.binding.includeRank.tvFinishPerson.setText(runRaceDetailInfo.getFinishNum()); | |
| 262 | + } | |
| 258 | 263 | //设置个人行走距离 |
| 259 | 264 | if (!TextUtils.isEmpty(runRaceDetailInfo.getUserMileage())) { |
| 260 | 265 | fragment.binding.includePersonScore.tvUserDistance.setText(runRaceDetailInfo.getUserMileage()); | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/receivers/ServiceReceiver.java
| ... | ... | @@ -8,6 +8,9 @@ import android.os.Build; |
| 8 | 8 | import android.os.PowerManager; |
| 9 | 9 | import android.util.Log; |
| 10 | 10 | |
| 11 | +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo; | |
| 12 | +import com.cnlive.moudle.pedometer.service.KeepLiveService; | |
| 13 | +import com.cnlive.moudle.pedometer.service.StepService; | |
| 11 | 14 | import com.cnlive.moudle.pedometer.utils.MySpHelper; |
| 12 | 15 | import com.cnlive.moudle.pedometer.utils.ServiceUtils; |
| 13 | 16 | |
| ... | ... | @@ -34,15 +37,33 @@ public class ServiceReceiver extends BroadcastReceiver { |
| 34 | 37 | public void onReceive(Context context, Intent intent) { |
| 35 | 38 | Log.e(TAG, "接收到广播:" + intent.getAction()); |
| 36 | 39 | //todo 这里判断要保活的服务 |
| 37 | -// UserService.getUid(context) | |
| 38 | - boolean isRun = MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).getBoolean("keepService", false); | |
| 39 | - Log.e("isRun", "" + isRun); | |
| 40 | - if (isRun) { | |
| 40 | + boolean isRunStepService = CommonInfo.getIsRunStepService(context); | |
| 41 | + if (isRunStepService) { | |
| 42 | + if (!ServiceUtils.isServiceRunning(context, "com.cnlive.moudle.pedometer.service.StepService")) { | |
| 43 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | |
| 44 | + context.startForegroundService(new Intent(context, StepService.class)); | |
| 45 | + } else { | |
| 46 | + context.startService(new Intent(context, StepService.class)); | |
| 47 | + } | |
| 48 | + } | |
| 49 | + //判断百度鹰眼是否运行 | |
| 50 | + boolean isRunBaiduTrace = CommonInfo.getIsRunBaiduTraceService(context); | |
| 51 | + if (isRunBaiduTrace) { | |
| 52 | + if (!ServiceUtils.isServiceRunning(context, "com.baidu.trace.LBSTraceService")) { | |
| 53 | + if (StepService.mClient != null && StepService.mTrace != null && StepService.traceListener != null) { | |
| 54 | + StepService.mClient.startTrace(StepService.mTrace, StepService.traceListener); | |
| 55 | + } | |
| 56 | + } | |
| 57 | + } | |
| 58 | + } | |
| 59 | + //todo 保活 | |
| 60 | + boolean isRunKeepAliveService = CommonInfo.getIsRunKeepAliveService(context); | |
| 61 | + if (isRunKeepAliveService) { | |
| 41 | 62 | if (!ServiceUtils.isServiceRunning(context, "com.cnlive.moudle.pedometer.service.KeepLiveService")) { |
| 42 | 63 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { |
| 43 | -// context.startForegroundService(new Intent(context, KeepLiveService.class)); | |
| 64 | + context.startForegroundService(new Intent(context, KeepLiveService.class)); | |
| 44 | 65 | } else { |
| 45 | -// context.startService(new Intent(context, KeepLiveService.class)); | |
| 66 | + context.startService(new Intent(context, KeepLiveService.class)); | |
| 46 | 67 | } |
| 47 | 68 | Log.e(TAG, "启动KeepLiveService"); |
| 48 | 69 | } | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/service/KeepLiveService.java
0 → 100644
| 1 | +package com.cnlive.moudle.pedometer.service; | |
| 2 | + | |
| 3 | +import android.annotation.SuppressLint; | |
| 4 | +import android.app.Notification; | |
| 5 | +import android.app.NotificationChannel; | |
| 6 | +import android.app.NotificationManager; | |
| 7 | +import android.app.Service; | |
| 8 | +import android.content.ComponentName; | |
| 9 | +import android.content.Context; | |
| 10 | +import android.content.Intent; | |
| 11 | +import android.content.IntentFilter; | |
| 12 | +import android.media.MediaPlayer; | |
| 13 | +import android.os.Build; | |
| 14 | +import android.os.Handler; | |
| 15 | +import android.os.IBinder; | |
| 16 | +import android.os.PowerManager; | |
| 17 | +import android.support.v4.app.NotificationCompat; | |
| 18 | +import android.util.Log; | |
| 19 | + | |
| 20 | +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo; | |
| 21 | +import com.cnlive.moudle.pedometer.receivers.ServiceReceiver; | |
| 22 | +import com.cnlive.moudle.pedometer.utils.ServiceUtils; | |
| 23 | +import com.example.moudle_pedometer.R; | |
| 24 | + | |
| 25 | + | |
| 26 | +/** | |
| 27 | + * @author ShinnyYang | |
| 28 | + * 维持后台运行的服务 | |
| 29 | + */ | |
| 30 | +public class KeepLiveService extends Service implements MediaPlayer.OnCompletionListener { | |
| 31 | + //唤醒锁 | |
| 32 | + private PowerManager.WakeLock wakeLock = null; | |
| 33 | + //电源管理器 | |
| 34 | + private PowerManager powerManager = null; | |
| 35 | + //音频播放器 | |
| 36 | + public static MediaPlayer mMediaPlayer; | |
| 37 | + //广播 | |
| 38 | + private static ServiceReceiver myReceiver; | |
| 39 | + private String CHANNEL_ONE_ID = "com.cnlive.keep"; | |
| 40 | + private String CHANNEL_ONE_NAME = "KeepLive"; | |
| 41 | + private NotificationManager mNM; | |
| 42 | + private Notification notification = null; | |
| 43 | + //是否在后台运行 | |
| 44 | + public static boolean isKeepService = true; | |
| 45 | + public static KeepLiveService instance; | |
| 46 | + private int startId; | |
| 47 | + private final String TAG = "KeepLiveService"; | |
| 48 | + private Handler handler; | |
| 49 | + private Runnable runnable; | |
| 50 | + | |
| 51 | + public KeepLiveService() { | |
| 52 | + } | |
| 53 | + | |
| 54 | + public static KeepLiveService getInstance() { | |
| 55 | + if (instance == null) { | |
| 56 | + instance = new KeepLiveService(); | |
| 57 | + return instance; | |
| 58 | + } else { | |
| 59 | + return instance; | |
| 60 | + } | |
| 61 | + } | |
| 62 | + | |
| 63 | + @Override | |
| 64 | + public void onCreate() { | |
| 65 | + super.onCreate(); | |
| 66 | + instance = this; | |
| 67 | +// if (!ServiceUtils.isServiceRunning(getApplicationContext(), "com.cnlive.moudle.pedometer.service.StepService")) { | |
| 68 | +// startService(new Intent(getApplicationContext(), StepService.class)); | |
| 69 | +// } | |
| 70 | + init(); | |
| 71 | + initBroadCastReceiver(); | |
| 72 | + handler = new Handler(); | |
| 73 | + runnable = new Runnable() { | |
| 74 | + @Override | |
| 75 | + public void run() { | |
| 76 | + //跨进程读取配置文件 | |
| 77 | + boolean isRun = CommonInfo.getIsRunKeepAliveService(getApplicationContext()); | |
| 78 | + if (isRun) { | |
| 79 | + handler.postDelayed(this, 5000); | |
| 80 | + } else { | |
| 81 | +// try { | |
| 82 | +// if (myReceiver != null) { | |
| 83 | +// unregisterReceiver(myReceiver); | |
| 84 | +// } | |
| 85 | +// } catch (Exception e) { | |
| 86 | +// Log.e(TAG, "run: "); | |
| 87 | +// } | |
| 88 | + stopPlaySong(); | |
| 89 | + stopForeground(true); | |
| 90 | + } | |
| 91 | + | |
| 92 | + } | |
| 93 | + }; | |
| 94 | + | |
| 95 | + } | |
| 96 | + | |
| 97 | + @Override | |
| 98 | + public void onTaskRemoved(Intent rootIntent) { | |
| 99 | + super.onTaskRemoved(rootIntent); | |
| 100 | + Log.e("onTaskRemoved", "onTaskRemoved"); | |
| 101 | + } | |
| 102 | + | |
| 103 | + /** | |
| 104 | + * 初始化广播 | |
| 105 | + */ | |
| 106 | + private void initBroadCastReceiver() { | |
| 107 | + if (wakeLock != null) { | |
| 108 | + myReceiver = new ServiceReceiver(wakeLock); | |
| 109 | + } else { | |
| 110 | + myReceiver = new ServiceReceiver(); | |
| 111 | + } | |
| 112 | + IntentFilter intentFilter = new IntentFilter(); | |
| 113 | + intentFilter.addAction(Intent.ACTION_SCREEN_OFF); | |
| 114 | + intentFilter.addAction(Intent.ACTION_SCREEN_ON); | |
| 115 | +// intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED); | |
| 116 | +// intentFilter.addAction(Intent.ACTION_TIME_CHANGED); | |
| 117 | +// intentFilter.addAction(Intent.ACTION_POWER_CONNECTED); | |
| 118 | +// intentFilter.addAction(Intent.ACTION_POWER_DISCONNECTED); | |
| 119 | + intentFilter.addAction("com.cnlive.strike.receiver.ServiceReceiver"); | |
| 120 | + intentFilter.addAction("close.KeepService"); | |
| 121 | + registerReceiver(myReceiver, intentFilter); | |
| 122 | + } | |
| 123 | + | |
| 124 | + /** | |
| 125 | + * 初始化相关参数 | |
| 126 | + */ | |
| 127 | + @SuppressLint("InvalidWakeLockTag") | |
| 128 | + private void init() { | |
| 129 | + if (null == powerManager) { | |
| 130 | + powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); | |
| 131 | + } | |
| 132 | + if (null == wakeLock) { | |
| 133 | + wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "track upload"); | |
| 134 | + } | |
| 135 | + if (null == mNM) { | |
| 136 | + mNM = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); | |
| 137 | + } | |
| 138 | + | |
| 139 | + } | |
| 140 | + | |
| 141 | + @SuppressLint("WrongConstant") | |
| 142 | + @Override | |
| 143 | + public int onStartCommand(Intent intent, int flags, int startId) { | |
| 144 | + //判断是否运行计步服务 | |
| 145 | + boolean isRunStepService = CommonInfo.getIsRunStepService(getApplicationContext()); | |
| 146 | + if (isRunStepService) { | |
| 147 | + if (!ServiceUtils.isServiceRunning(getApplicationContext(), "com.cnlive.moudle.pedometer.service.StepService")) { | |
| 148 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | |
| 149 | + startForegroundService(new Intent(getApplicationContext(), StepService.class)); | |
| 150 | + } else { | |
| 151 | + startService(new Intent(getApplicationContext(), StepService.class)); | |
| 152 | + } | |
| 153 | + } | |
| 154 | + } | |
| 155 | + this.startId = startId; | |
| 156 | + //跨进程读取配置文件 | |
| 157 | + boolean isRun = CommonInfo.getIsRunKeepAliveService(getApplicationContext()); | |
| 158 | + Log.e("isRun onStartCommand", "" + isRun); | |
| 159 | + | |
| 160 | + if (isRun) { | |
| 161 | + if (runnable != null) { | |
| 162 | + handler.postDelayed(runnable, 5000); | |
| 163 | + } | |
| 164 | + showHideForegroundNotification(); | |
| 165 | +// startService(new Intent(getApplicationContext(), HideKeepTipService.class)); | |
| 166 | + Log.e(TAG, "启动HideKeepTipService"); | |
| 167 | + startPlaySong(); | |
| 168 | + } | |
| 169 | + return START_STICKY; | |
| 170 | + } | |
| 171 | + | |
| 172 | + //开始、暂停播放 | |
| 173 | + public void startPlaySong() { | |
| 174 | + if (mMediaPlayer == null) { | |
| 175 | + mMediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.no_kill); | |
| 176 | + } | |
| 177 | + mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK); | |
| 178 | + mMediaPlayer.setOnCompletionListener(this); | |
| 179 | +// mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { | |
| 180 | +// @Override | |
| 181 | +// public boolean onError(MediaPlayer mediaPlayer, int i, int i1) { | |
| 182 | +// mMediaPlayer.reset(); | |
| 183 | +// mMediaPlayer.release(); | |
| 184 | +// mMediaPlayer = null; | |
| 185 | +// startPlaySong(); | |
| 186 | +// return false; | |
| 187 | +// } | |
| 188 | +// }); | |
| 189 | + if (!mMediaPlayer.isPlaying()) { | |
| 190 | + mMediaPlayer.start(); | |
| 191 | + Log.e(TAG, "开始播放"); | |
| 192 | + } | |
| 193 | + | |
| 194 | + } | |
| 195 | + | |
| 196 | + //停止播放销毁对象 | |
| 197 | + public void stopPlaySong() { | |
| 198 | + | |
| 199 | + if (mMediaPlayer != null) { | |
| 200 | + mMediaPlayer.stop(); | |
| 201 | + mMediaPlayer.release(); | |
| 202 | + mMediaPlayer = null; | |
| 203 | + Log.e("停止播放", "停止"); | |
| 204 | + } | |
| 205 | + } | |
| 206 | + | |
| 207 | + | |
| 208 | + private void showHideForegroundNotification() { | |
| 209 | + NotificationChannel channel = null; | |
| 210 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | |
| 211 | + channel = new NotificationChannel(CHANNEL_ONE_ID, CHANNEL_ONE_NAME, | |
| 212 | + NotificationManager.IMPORTANCE_HIGH); | |
| 213 | + channel.enableLights(false); | |
| 214 | + channel.enableVibration(false); | |
| 215 | + channel.setVibrationPattern(new long[]{0}); | |
| 216 | + channel.setSound(null, null); | |
| 217 | + channel.setLockscreenVisibility(NotificationCompat.VISIBILITY_PRIVATE); | |
| 218 | + mNM.createNotificationChannel(channel); | |
| 219 | + } | |
| 220 | + notification = new NotificationCompat.Builder(this, CHANNEL_ONE_ID) | |
| 221 | + .setWhen(System.currentTimeMillis()) | |
| 222 | + .setSound(null) | |
| 223 | + .build(); | |
| 224 | + // 0 隐藏前台服务通知 | |
| 225 | + startForeground(100, notification); | |
| 226 | +// stopForeground(true); | |
| 227 | + } | |
| 228 | + | |
| 229 | + @Override | |
| 230 | + public void onDestroy() { | |
| 231 | + super.onDestroy(); | |
| 232 | + Log.e("onDestroy", "onDestroy:" + notification); | |
| 233 | + if (myReceiver != null) { | |
| 234 | + unregisterReceiver(myReceiver); | |
| 235 | + } | |
| 236 | + try { | |
| 237 | +// stopForeground(true); | |
| 238 | + } catch (Exception e) { | |
| 239 | + } | |
| 240 | + stopPlaySong(); | |
| 241 | + // 重启自己 | |
| 242 | + if (isKeepService) { | |
| 243 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | |
| 244 | + startForegroundService(new Intent(getApplicationContext(), KeepLiveService.class)); | |
| 245 | + } else { | |
| 246 | + startService(new Intent(getApplicationContext(), KeepLiveService.class)); | |
| 247 | + } | |
| 248 | + //发送重启广播 | |
| 249 | + sendRestartBroadCast(); | |
| 250 | + } | |
| 251 | + | |
| 252 | + | |
| 253 | + } | |
| 254 | + | |
| 255 | + | |
| 256 | + /** | |
| 257 | + * 发送重启广播 | |
| 258 | + */ | |
| 259 | + private void sendRestartBroadCast() { | |
| 260 | + Intent intent = new Intent(" com.cnlive.moudle.pedometer.receivers.MyReceiver"); | |
| 261 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | |
| 262 | + intent.setComponent(new ComponentName(getPackageName(), " com.cnlive.moudle.pedometer.receivers.MyReceiver"));//高版本Android发送广播需要加这句 | |
| 263 | + } | |
| 264 | + sendBroadcast(intent); | |
| 265 | + } | |
| 266 | + | |
| 267 | + @Override | |
| 268 | + public IBinder onBind(Intent intent) { | |
| 269 | + // TODO: Return the communication channel to the service. | |
| 270 | + throw new UnsupportedOperationException("Not yet implemented"); | |
| 271 | + } | |
| 272 | + | |
| 273 | + | |
| 274 | + /** | |
| 275 | + * 歌曲播放完成 | |
| 276 | + * | |
| 277 | + * @param mediaPlayer | |
| 278 | + */ | |
| 279 | + @Override | |
| 280 | + public void onCompletion(MediaPlayer mediaPlayer) { | |
| 281 | + boolean isRun = CommonInfo.getIsRunKeepAliveService(getApplicationContext()); | |
| 282 | + | |
| 283 | + if (isRun) { | |
| 284 | + Log.e(TAG, "重新播放"); | |
| 285 | + mediaPlayer.start(); | |
| 286 | + Intent intent = new Intent("com.cnlive.strike.receiver.ServiceReceiver"); | |
| 287 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | |
| 288 | + intent.setComponent(new ComponentName(getPackageName(), "com.cnlive.strike.receiver.ServiceReceiver"));//高版本Android发送广播需要加这句 | |
| 289 | + } | |
| 290 | + sendBroadcast(intent); | |
| 291 | + } else { | |
| 292 | + Log.e(TAG, "停止重新播放"); | |
| 293 | + stopPlaySong(); | |
| 294 | + } | |
| 295 | + | |
| 296 | + | |
| 297 | + } | |
| 298 | +} | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/service/StepService.java
| ... | ... | @@ -232,7 +232,6 @@ public class StepService extends Service implements SensorEventListener { |
| 232 | 232 | if (mClient != null) { |
| 233 | 233 | mClient.startGather(traceListener); |
| 234 | 234 | Toast.makeText(getApplicationContext(), "开启轨迹服务", Toast.LENGTH_LONG).show(); |
| 235 | - | |
| 236 | 235 | } |
| 237 | 236 | } |
| 238 | 237 | } |
| ... | ... | @@ -273,6 +272,8 @@ public class StepService extends Service implements SensorEventListener { |
| 273 | 272 | public void onStartGatherCallback(int errorNo, String message) { |
| 274 | 273 | if (StatusCodes.SUCCESS == errorNo || StatusCodes.GATHER_STARTED == errorNo) { |
| 275 | 274 | Toast.makeText(getApplicationContext(), "开始采集", Toast.LENGTH_LONG).show(); |
| 275 | + CommonInfo.setTsRunBaiduTraceService(getApplicationContext(), true); | |
| 276 | + | |
| 276 | 277 | } |
| 277 | 278 | } |
| 278 | 279 | |
| ... | ... | @@ -292,6 +293,7 @@ public class StepService extends Service implements SensorEventListener { |
| 292 | 293 | Toast.makeText(getApplicationContext(), "停止采集", Toast.LENGTH_LONG).show(); |
| 293 | 294 | if (mClient != null) { |
| 294 | 295 | mClient.stopTrace(mTrace, traceListener); |
| 296 | + CommonInfo.setTsRunBaiduTraceService(getApplicationContext(), false); | |
| 295 | 297 | } |
| 296 | 298 | } |
| 297 | 299 | } |
| ... | ... | @@ -356,7 +358,7 @@ public class StepService extends Service implements SensorEventListener { |
| 356 | 358 | @SuppressLint("WrongConstant") |
| 357 | 359 | @Override |
| 358 | 360 | public int onStartCommand(Intent intent, int flags, int startId) { |
| 359 | - userId =CommonInfo.getUserId(getApplicationContext()); | |
| 361 | + userId = CommonInfo.getUserId(getApplicationContext()); | |
| 360 | 362 | if (userId != null && !TextUtils.isEmpty(userId)) { |
| 361 | 363 | if (!EventBus.getDefault().isRegistered(this)) { |
| 362 | 364 | EventBus.getDefault().register(this); | ... | ... |
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/fragment/RunRaceDetailFragment.java
| ... | ... | @@ -7,12 +7,14 @@ import android.support.annotation.NonNull; |
| 7 | 7 | import android.support.annotation.Nullable; |
| 8 | 8 | import android.support.design.widget.BottomSheetBehavior; |
| 9 | 9 | import android.support.design.widget.BottomSheetDialog; |
| 10 | +import android.text.TextUtils; | |
| 10 | 11 | import android.util.Log; |
| 11 | 12 | import android.view.View; |
| 12 | 13 | import android.widget.FrameLayout; |
| 13 | 14 | import android.widget.LinearLayout; |
| 14 | 15 | |
| 15 | 16 | import com.cnlive.libs.base.ui.QMUIFragment; |
| 17 | +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo; | |
| 16 | 18 | import com.cnlive.moudle.pedometer.frame.presenter.RunRaceDetailFragmentPresenter; |
| 17 | 19 | import com.cnlive.moudle.pedometer.frame.view.RunRaceDetailFragmentView; |
| 18 | 20 | import com.cnlive.moudle.pedometer.sql.entity.UserStepEntity; |
| ... | ... | @@ -64,7 +66,8 @@ public class RunRaceDetailFragment extends QMUIFragment<RunRaceDetailFragmentVie |
| 64 | 66 | getMvpView().initMap();; |
| 65 | 67 | } |
| 66 | 68 | if (getPresenter()!=null){ |
| 67 | - getPresenter().getRunRaceDetailInfo(getActivity(),"116","10513196"); | |
| 69 | + if (!TextUtils.isEmpty(CommonInfo.getStreetId(getActivity()))) | |
| 70 | + getPresenter().getRunRaceDetailInfo(getActivity(),CommonInfo.getStreetId(getActivity()),"10513196"); | |
| 68 | 71 | } |
| 69 | 72 | |
| 70 | 73 | } | ... | ... |
moudle_pedometer/src/main/res/layout/layout_run_detail_street.xml
| ... | ... | @@ -76,14 +76,6 @@ |
| 76 | 76 | android:textColor="@color/text_black" |
| 77 | 77 | android:textSize="15sp" /> |
| 78 | 78 | |
| 79 | - <TextView | |
| 80 | - android:id="@+id/tv_mileage" | |
| 81 | - android:layout_width="wrap_content" | |
| 82 | - android:layout_height="wrap_content" | |
| 83 | - android:layout_marginLeft="25dp" | |
| 84 | - android:text="-" | |
| 85 | - android:textColor="@color/text_black" | |
| 86 | - android:textSize="15sp" /> | |
| 87 | 79 | </LinearLayout> |
| 88 | 80 | </LinearLayout> |
| 89 | 81 | <!--按钮--> | ... | ... |