私はアンドロイドヌガーをターゲットにしたアンドロイドアプリケーションを開発しています。インターネットに接続されている場合は、バックグラウンドスレッドでローカルデータベースへのリモートSQL同期を実行する必要があります。ブロードキャストレシーバーを使用して接続を検出しようとしましたが、Android Nで起動しません。バックグラウンドでそれを行うにはどうすればよいですか(インターネットの可用性を確認してください)。例が役に立ちます
私はこれを試しました
Androidマニフェスト
<receiver android:name=".NetworkChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
NetworkChangeReciever.java
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
Toast.makeText(context,"Internet state changed",Toast.LENGTH_LONG).show();
}
私は自分の質問に対する答えを得ました。
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
マニフェストに登録されているアクション付きのブロードキャストレシーバーは、Android Nでは起動しません。ただし、プログラムでブロードキャストを登録して機能させることはできます。ただし、アプリが強制終了されると機能しません。
それから私の場合、2つのオプションがありました(それは私が思っていたものです)、同期操作をスケジュールする
GCMネットワークマネージャー
または
ジョブスケジューラ
ジョブスケジューラの問題は、APIレベル21以上でのみ機能することですが、機能するためにGooglePlayサービスを必要としません。一方、GCMネットワークマネージャーには下位互換性がありましたが、実行するにはGooglePlayサービスが必要です。
次に、Intelligent Job Schedulingにアクセスしましたが、Firebase JobDispatcherを使用すると言われました。
Firebase JobDispatcherは、ジョブをディスパッチ(実行)するための実装としてGoogle Playサービスの使用をサポートしていますが、ライブラリでは他の実装を定義して使用することもできます。たとえば、JobSchedulerを使用するか、独自のカスタムコードを作成することができます。この汎用性のため、アプリが5.0(APIレベル21)より前のバージョンのAndroidをターゲットにしている場合は、このFirebaseJobDispatcherを使用することをお勧めします。
そして私はそのアドバイスを受けました、そしてこれは私がしたことです、
同期ジョブを実行するサービス(SyncService.java)を作成し、
マニフェストにそのサービスを追加しました
<service
android:exported="false"
android:name=".SyncService">
<intent-filter>
<action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE"/>
</intent-filter>
</service>
そして私の活動では、同期するジョブを作成して実行しました
Job syncJob=jobDispatcher.newJobBuilder()
.setService(SyncService.class)
.setRecurring(true)
.setLifetime(Lifetime.FOREVER)
.setRecurring(true)
.setLifetime(Lifetime.FOREVER)
.setTrigger(Trigger.executionWindow(3,600))
.setConstraints(Constraint.ON_ANY_NETWORK) //does job when network is available
.setReplaceCurrent(true)
.setTag("syncService")
.build();
jobDispatcher.mustSchedule(syncJob);
そして、これはバックグラウンドで機能します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加