kolibri
جمعه 04 خرداد 1397, 13:53 عصر
سلام؛
من نیاز دارم در پس زمینه، طی دوره زمانی مشخص و با اطلاع از اتصال به شبکه اینترنت، یک سری اطلاعات رو از سورس دریافت کنم. مشکلی که من دارم، نا آشنا بودن با این تکنولوژی ها و تازه کار بودن من در جاوا و اندروید هست.
BroadcastReceiver همونطور که می دونید، برای آگاهی از بعضی رویدادها در سیستم هست و من از این برای اطلاع از متصل بودن به نت استفاده کردم، به محض اینکه نت (Mobile Data/WiFi) متصل باشه، کلاس زیر شروع به کار می کنه:
public class NetworkChangeReceiver extends BroadcastReceiver {
private Context mContext;
private JobScheduler mJobScheduler;
@Override public void onReceive(final Context context, final Intent intent) {
try {
boolean isVisible = AppController.isActivityVisible();// Check if Log.i("Activity is Visible ", "Is activity visible : " + isVisible);
// If it is visible then trigger the task else do nothing
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager
.getActiveNetworkInfo();
// Check internet connection and accrding to state change the // text of activity by calling method if (networkInfo != null && networkInfo.isConnected()) {
mContext = context;
mJobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SER VICE);
JobInfo.Builder builder = new JobInfo.Builder(1,
new ComponentName(MainActivity.PACKAGE_NAME, Job.class.getName()));
builder.setPeriodic(3000);
builder.build();
if (mJobScheduler.schedule(builder.build()) == JobScheduler.RESULT_FAILURE) {
//If something goes wrong Log.i("mJobScheduler", "If something goes wrong ");
}
} else {
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
مزیت اینه که وقت نت قطع شد، می تونم پس زمینه رو هم متوقف کنم تا مشکلی پیش نیاد. اما این کلاس JobService من هست که برای تست هست:
public class Job extends JobService {
private static final String TAG = "SyncService";
@Override
public boolean onStartJob(JobParameters params) {
// fake work
Log.i(TAG, "on start job: " + params.getJobId());
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
return true;
}
}
من در اینجا شیئی از Job.Class ساختم و اون رو شروع هم کردم، اما این کلاس عکس العملی نداره و اجرا نمیشه (کلاس NetworkChangeReceiver به خوبی کار می کند):
if (networkInfo != null && networkInfo.isConnected()) {
mContext = context;
mJobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SER VICE);
JobInfo.Builder builder = new JobInfo.Builder(1,
new ComponentName(MainActivity.PACKAGE_NAME, Job.class.getName()));
builder.setPeriodic(3000);
builder.build();
if (mJobScheduler.schedule(builder.build()) == JobScheduler.RESULT_FAILURE) {
//If something goes wrong
Log.i("mJobScheduler", "If something goes wrong ");
}
} else {
}
حالا سوال من این هست:
1. چطور کلاس Job رو صدا بزنم؟
2. چطور زمانبندی ایجاد کنم؟ مثلا هر ساعت یکبار اجرا شود.
با تشکر
من نیاز دارم در پس زمینه، طی دوره زمانی مشخص و با اطلاع از اتصال به شبکه اینترنت، یک سری اطلاعات رو از سورس دریافت کنم. مشکلی که من دارم، نا آشنا بودن با این تکنولوژی ها و تازه کار بودن من در جاوا و اندروید هست.
BroadcastReceiver همونطور که می دونید، برای آگاهی از بعضی رویدادها در سیستم هست و من از این برای اطلاع از متصل بودن به نت استفاده کردم، به محض اینکه نت (Mobile Data/WiFi) متصل باشه، کلاس زیر شروع به کار می کنه:
public class NetworkChangeReceiver extends BroadcastReceiver {
private Context mContext;
private JobScheduler mJobScheduler;
@Override public void onReceive(final Context context, final Intent intent) {
try {
boolean isVisible = AppController.isActivityVisible();// Check if Log.i("Activity is Visible ", "Is activity visible : " + isVisible);
// If it is visible then trigger the task else do nothing
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager
.getActiveNetworkInfo();
// Check internet connection and accrding to state change the // text of activity by calling method if (networkInfo != null && networkInfo.isConnected()) {
mContext = context;
mJobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SER VICE);
JobInfo.Builder builder = new JobInfo.Builder(1,
new ComponentName(MainActivity.PACKAGE_NAME, Job.class.getName()));
builder.setPeriodic(3000);
builder.build();
if (mJobScheduler.schedule(builder.build()) == JobScheduler.RESULT_FAILURE) {
//If something goes wrong Log.i("mJobScheduler", "If something goes wrong ");
}
} else {
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
مزیت اینه که وقت نت قطع شد، می تونم پس زمینه رو هم متوقف کنم تا مشکلی پیش نیاد. اما این کلاس JobService من هست که برای تست هست:
public class Job extends JobService {
private static final String TAG = "SyncService";
@Override
public boolean onStartJob(JobParameters params) {
// fake work
Log.i(TAG, "on start job: " + params.getJobId());
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
return true;
}
}
من در اینجا شیئی از Job.Class ساختم و اون رو شروع هم کردم، اما این کلاس عکس العملی نداره و اجرا نمیشه (کلاس NetworkChangeReceiver به خوبی کار می کند):
if (networkInfo != null && networkInfo.isConnected()) {
mContext = context;
mJobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SER VICE);
JobInfo.Builder builder = new JobInfo.Builder(1,
new ComponentName(MainActivity.PACKAGE_NAME, Job.class.getName()));
builder.setPeriodic(3000);
builder.build();
if (mJobScheduler.schedule(builder.build()) == JobScheduler.RESULT_FAILURE) {
//If something goes wrong
Log.i("mJobScheduler", "If something goes wrong ");
}
} else {
}
حالا سوال من این هست:
1. چطور کلاس Job رو صدا بزنم؟
2. چطور زمانبندی ایجاد کنم؟ مثلا هر ساعت یکبار اجرا شود.
با تشکر