Я работаю над проектом, который использует диспетчер заданий firebase для планирования задания, которое выполняется с интервалами. Но дело в том, что я запустил код на эмуляторе студии Android, и он работал нормально. Задание было запланировано, и я получил тост от класса обслуживания, показывающий, что выполнение кода выполнено успешно. Однако я попытался запустить его на телефоне Android в реальном времени, код создается и запускается на устройстве, но задание никогда не запланировано , сообщение не получено. Я перепробовал все, но класс jobService так и не был вызван. Я попытался снова запустить приложение на эмуляторе, и оно работает нормально, но оно никогда не работало на моем устройстве реального времени. Пожалуйста, в чем может быть причина этого. Я добавил зависимость firebase gradle в файл build.gradle. Я добавил jobService в папку манифеста. Я не просто знаю, в чем причина этого затруднительного положения. Пожалуйста, мне нужно объяснение. БЛАГОДАРЮ.
Основное действие
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.firebase.jobdispatcher.Constraint;
import com.firebase.jobdispatcher.FirebaseJobDispatcher;
import com.firebase.jobdispatcher.GooglePlayDriver;
import com.firebase.jobdispatcher.Job;
import com.firebase.jobdispatcher.Lifetime;
import com.firebase.jobdispatcher.RetryStrategy;
import com.firebase.jobdispatcher.Trigger;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import static android.R.attr.start;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button start_job, stop_job;
private static final String Job_Tag = "myJobTag";
private FirebaseJobDispatcher jobDispatcher;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
jobDispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));
start_job = (Button) findViewById(R.id.start_job);
stop_job = (Button) findViewById(R.id.stop_job);
start_job.setOnClickListener(this);
stop_job.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.start_job){
Job job = jobDispatcher.newJobBuilder()
.setService(MyFirebaseJobScheduler.class)
.setLifetime(Lifetime.FOREVER)
.setRecurring(true)
.setTag(Job_Tag)
.setTrigger(Trigger.executionWindow(1, 2))
.setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
.setReplaceCurrent(false)
.setConstraints(Constraint.ON_ANY_NETWORK)
.build();
jobDispatcher.mustSchedule(job);
Toast.makeText(this, "Job scheduled.", Toast.LENGTH_SHORT).show();
}else if(v.getId() == R.id.stop_job){
jobDispatcher.cancel(Job_Tag);
Toast.makeText(this, "Job canceled.", Toast.LENGTH_SHORT).show();
}
}
}
Класс JobService
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
import com.firebase.jobdispatcher.JobParameters;
import com.firebase.jobdispatcher.JobService;
public class MyFirebaseJobScheduler extends JobService {
BackgroundScheduledTask backgroundScheduledTask;
@Override
public boolean onStartJob(final JobParameters jobParameters) {
Log.d("JobDispatcher", "Job Called");
backgroundScheduledTask = new BackgroundScheduledTask(){
@Override
protected void onPostExecute(String s) {
Log.d("JobDispatcher", "PostExecute");
Toast.makeText(getApplicationContext(), "Message from back task = "+s, Toast.LENGTH_LONG).show();
jobFinished(jobParameters, false);
}
};
backgroundScheduledTask.execute();
return true;
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
return false;
}
public static class BackgroundScheduledTask extends AsyncTask<Void, Void, String>{
@Override
protected String doInBackground(Void... params) {
Log.d("JobDispatcher", "In background");
return "Hello from background Job";
}
}
}
Манифест
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".MyFirebaseJobScheduler"
android:exported="false">
<intent-filter>
<action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE"/>
</intent-filter>
</service>
</application>
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "26.0.2"
defaultConfig {
applicationId "com.cyclon.server"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.firebase:firebase-jobdispatcher:0.5.2'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
}