服务的存活
Notification.Builder builder = new Notification.Builder(this);
Intent notificationIntent = new Intent(this, TracingActivity.class);
Bitmap icon = BitmapFactory.decodeResource(this.getResources(),
R.mipmap.icon_tracing);
NotificationManager notificationManager = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
// PendingIntent
builder.setContentIntent(PendingIntent.getActivity(this, 0,
notificationIntent, 0))
.setLargeIcon(icon) // ()
.setContentTitle("") //
.setSmallIcon(R.mipmap.icon_tracing) //
.setContentText("...") //
.setWhen(System.currentTimeMillis());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && null !=
notificationManager) {
NotificationChannel notificationChannel =
new NotificationChannel("trace", "trace_channel",
NotificationManager.IMPORTANCE_HIGH);
notificationManager.createNotificationChannel(notificationChannel);
builder.setChannelId("trace"); // Android OchannelId
}
notification = builder.build(); // Notification
notification.defaults = Notification.DEFAULT_SOUND; //
LBSTraceClient mClient = new LBSTraceClient(mContext);
Trace mTrace = new Trace(serviceId, entityName);
mTrace.setNotification(notification);
<span style="color: #FF0000;">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
</span>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
//位置采集周期
// 在Android 6.0及以上系统,若定制手机使用到doze模式,请求将应用添加到白名单。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
String packageName = trackApp.getPackageName();
boolean isIgnoring = powerManager.isIgnoringBatteryOptimizations(packageName);
if (!isIgnoring) {
Intent intent = new Intent(
Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
try {
startActivity(intent);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
//位置采集周期
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
设备网络通信中断:立即停止采集轨迹,同时将缓存数据会存储在设备数据库中,鹰眼服务停止,并返回回调信息。
修改于 2022-08-08 04:07:26