- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个应用程序来跟踪 Google map 上的路线历史记录。它会每 5 分钟获取一次设备的当前位置,并通过网络服务将数据发送到服务器。
此代码用于从 MainActivity 调用 BroadcastReceiver
manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class);
intent.putExtra("USERNAME", mUsername);
intent.putExtra("DB_NAME", mDBName);
intent.putExtra("DB_IP", mDBIP);
intent.putExtra("DB_USER", mDBUsername);
intent.putExtra("DB_PASS", mDBPassword);
intent.putExtra("SERVER_IP", mServerIP);
mAlarmIntent = PendingIntent.getActivity(getApplicationContext(), REQUEST_CODE, intent, 0);
int mTimeRepeat = 300 * 1000; // repeat every 5 minutes
int mTimeStart = 5 * 1000;
manager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + mTimeStart, mTimeRepeat, mAlarmIntent);
在 BroadcastReceiver 中,我获取经纬度并调用网络服务。
public class AlarmReceiver extends BroadcastReceiver {
private static final String TAG = "Alarm Receiver";
private String mUsername = "";
private String mDBName = "";
private String mDBIP = "";
private String mDBUsername = "";
private String mDBPassword = "";
private String mServerIP = "";
private Context context;
private static AsyncHttpClient sClient = new AsyncHttpClient();
@Override
public void onReceive(final Context context, Intent intent) {
this.context = context;
mUsername = intent.getStringExtra("USERNAME");
mDBIP = intent.getStringExtra("DB_IP");
mDBName = intent.getStringExtra("DB_NAME");
mDBUsername = intent.getStringExtra("DB_USER");
mDBPassword = intent.getStringExtra("DB_PASS");
mServerIP = intent.getStringExtra("SERVER_IP");
if (Utility.checkLocationPermission(context)) {
try {
GPSTracker mGPS = new GPSTracker(context);
// check if GPS enabled
if (mGPS.canGetLocation()) {
double latitude = mGPS.getLatitude();
double longitude = mGPS.getLongitude();
// more code here
问题是当我的手机保持唤醒状态时该应用程序运行良好,如果手机处于休眠状态,它就无法运行。我想在手机休眠时发送数据,我该怎么做?
最佳答案
为了更好地满足此要求,您可以使用 JobScheduler API。
AlarmManager 已过时。
使用 JobScheduler 的优势:
我测试过它工作正常。有关更多信息,请查看以下链接。
引用以下链接:
http://www.vogella.com/tutorials/AndroidTaskScheduling/article.html#schedulingtasks
https://developer.android.com/reference/android/app/job/JobScheduler.html
如果有任何不清楚的地方,请告诉我,我们会分享工作示例,如果有帮助,请告诉我。
使用下面的工作示例:
public class PollingService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
Log.d("PollingService", "onStartJob in PollingService is called");
jobFinished(params, false);
return false;
}
@Override
public boolean onStopJob(JobParameters params) {
Log.d("PollingService", "onStopJob in PollingService is called");
return false;
}
}
在 list 中注册:
<service
android:name=".Services.PollingService"
android:exported="true"
android:permission="android.permission.BIND_JOB_SERVICE" />
在 Activity 中使用以下代码启动服务:
//put this in oncreate of Activity or from where u want to start
JobScheduler mJobScheduler = JobScheduler.getInstance(getApplicationContext());
buidJob(); //Method call
//Method
private void buidJob() {
JobInfo.Builder jobinfo = new JobInfo.Builder(100,new ComponentName(this,PollingService.class));
jobinfo.setPeriodic(50*1000).
setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED).
setPersisted(true);
//build();
mJobScheduler.schedule(jobinfo.build());
Log.d(TAG,"buidJob()");
}
依赖:
compile 'me.tatarka.support:jobscheduler:0.1.1'
支持 aar 以上使用的低端版本。如果我们按照上面提到的链接进行操作,您可以在不使用上面的 aar 的情况下完成。
关于android - BroacastReceiver 在设备休眠时不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45606434/
我正在编写一个应用程序来跟踪 Google map 上的路线历史记录。它会每 5 分钟获取一次设备的当前位置,并通过网络服务将数据发送到服务器。 此代码用于从 MainActivity 调用 Broa
我正在开发一款安卓应用。此应用程序分为 2 个应用程序部分,一个应用程序部分作为库部分,第二部分处理正常任务。 我在图书馆应用程序中实现 GCM 推送通知,因此,我在图书馆应用程序和第二个应用程序上注
我在首选项 Activity 中注册了一个广播接收器,并从(清醒的)IntentService 向它发送(同步)广播。显然 onReceive 在服务的线程上运行。这是我的错吗?是否记录了行为? 偏好
我是一名优秀的程序员,十分优秀!