And*_*rea 1 service gps android locationmanager
我需要制作一个每次都在后台运行的应用程序(间谍应用程序)并将设备的位置发送到服务器。
我不想使用 Google Api。
我尝试使用服务、意图服务、前台服务、用于套接字等的线程等,但是当我关闭主要活动时,它在后台运行,有时然后被杀死。
我怎样才能做到这一点?求求你,帮帮我<3
是的,让我告诉你,如果你有小米、OPPO、Vivo 等设备。您的服务将被他们杀死。所以无论你怎么努力,如果你没有在设置中勾选自动启动,它都会被杀死。所以你必须绑定用户来检查它以使你的应用程序在后台运行。
所以,你可以做很多事情:
`
public class GcmNetworkTask extends GcmTaskService {
@Override
public int onRunTask(TaskParams taskParams) {
restartYourServiceHere();
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
AlarmManager 重新启动您的服务。
Bootcomplete 接收器用于在系统重新启动时启动您的服务
公共类 BootCompleteReceiver 扩展 BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, Sample_service.class);
context.startService(service);
}
Run Code Online (Sandbox Code Playgroud)
}
然后服务的 onstartCommand 中的警报管理器将执行以下操作:
intent = new Intent(this, ReceiverClass.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
+ (40000), pendingIntent);
return START_STICKY;
Run Code Online (Sandbox Code Playgroud)
然后又是一个接收器类来捕捉警报管理器:
public class ReceiverClass extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
context.startService(new Intent(context, Sample_service.class));
}
}
Run Code Online (Sandbox Code Playgroud)
要查找位置,您可以使用 Google fusedLocationAPI、位置管理器(如果您没有获得 GPS,您也可以通过网络获取位置)。
如果有人发现它太棘手,您可以使用 hack :在服务的 OnDestroy 中重新启动您的服务:
@Override
public void onDestroy() {
Intent startSeviceIntent = new Intent(getApplicationContext(), SampleService.class);
startService(startSeviceIntent);
super.onDestroy();
}
在 onStartCommand 方法中获取位置并执行您想要的操作。
| 归档时间: |
|
| 查看次数: |
5354 次 |
| 最近记录: |