2017-02-02 1 views
0

Я использую диспетчер задания Firebase для планирования службы, но это не вызывает запуск класса сервиса.Firebase Job Dispatcher не запускает мой класс обслуживания

Мне нужна помощь в реализации этой услуги.

minSdkVersion 16

targetSdkVersion 25

MainActivity.java

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Log.d("SCHEDULER", "onCreate()"); 

    // Create a new dispatcher using the Google Play driver. 
    FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this)); 
    Job myJob = dispatcher.newJobBuilder() 
      .setService(MyJobService.class) 
      .setRecurring(true) 
      .setTrigger(Trigger.executionWindow(10, 20)) 
      .setRetryStrategy(RetryStrategy.DEFAULT_LINEAR) 
      .setTag("location-update-job") 
      .setLifetime(Lifetime.FOREVER) 
      .build(); 

    dispatcher.mustSchedule(myJob); 

} 
} 

MyJobSerivce.java

import android.util.Log; 

import com.firebase.jobdispatcher.JobParameters; 
import com.firebase.jobdispatcher.JobService; 

public class MyJobService extends JobService { 
    @Override 
    public boolean onStartJob(JobParameters job) { 
     Log.d("SCHEDULER", "onStartJob()"); 
     return false; 
    } 

    @Override 
    public boolean onStopJob(JobParameters job) { 
     Log.d("SCHEDULER", "onStopJob()"); 
     return false; 
    } 
} 

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.alugalogo.igor.jobdispatcher"> 

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

<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:exported="false" 
     android:name=".MyJobService"> 
     <intent-filter> 
      <action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE"/> 
     </intent-filter> 
    </service> 
</application> 

Я получаю результат «onCreate()».

Что не так с моим кодом?

, пожалуйста, помогите!

+0

Для какого устройства, на котором Android версии это встречающийся? – mdiener

ответ

1

Попробуйте добавить к вашей работе строителя:

.setConstraints(Constraint.ON_ANY_NETWORK) 
// constraints that need to be satisfied for the job to run 
+0

Я тоже пробовал это, но не запускаю службу –

+1

Зачем это вообще нужно? –

1

После того, как работа с тегом создается новая работа с тем же тегом будет отклонено по умолчанию. Чтобы воссоздать задание с тем же тегом, следует использовать метод .setReplaceCurrent(true) в экземпляре JobBuilder.

Таким образом, вы можете попробовать использовать этот метод для воссоздания задания с желаемым временем начала.

0

Две ошибки:

  1. Возврат false в onStartJob

    , что означает: вся работа сделана!
    Javadoc:

    @return {@code true} if there is more work remaining in the worker thread, {@code false} if the 
    * job was completed. 
    
  2. Вернуться false в onStopJob

    , что означает: вся работа сделана, не перепланировать!
    Javadoc: @return true if the job should be retried

0

Привет вы должны добавить, чтобы проявить BIND_JOB_SERVICE у вас есть только ACTION_EXECUTE:

<service 
     android:name=".MyJobService" 
     android:permission="android.permission.BIND_JOB_SERVICE" 
     > 
     <intent-filter> 
      <action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE" /> 
     </intent-filter> 
    </service> 
Смежные вопросы