現在、私はデバイスの起動以来、モバイルネットワークを介して送受信される30秒ごとにそれを行うことができます。30秒ごとにモバイルデータを取得するバックグラウンドアプリ(サービス)を作成する方法。サービスは24時間365日稼働している必要があります
Timer
: -
Timer mTimer = new Timer();
mTimer.scheduleAtFixedRate(mTimeTask, 0, AppConstants.DATA_TRACKING_PERIOD);
private TimerTask mTimeTask = new TimerTask() {
@Override
public void run() {
long currentRx = TrafficStats.getMobileRxBytes();
long currentTx = TrafficStats.getMobileTxBytes();
}
}
};
Service
: -
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (isInstanceCreated()) {
if(!mSocket.connected()){
connectConnection();
}
return START_STICKY;
}
super.onStartCommand(intent, flags, startId);
connectConnection();
//Timer starts from here
mTrafficHelper.startTracking();
return START_STICKY;
}
AndroidManifest.xml
: -
<!-- Access network/ Internet connection permission -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<service android:name=".services.MyService"
android:enabled="true"
android:exported="true"
android:priority="100" />
これは、上記の要件を実装するための正しい方法は何ですか?提案してください。
はい。あなたは100%正しいです。しかし、これは私の必要条件ではありません。これはクライアントの要求です。また、アプリは基本的に30秒ごとにモバイルデータの使用状況を追跡する必要があります。手伝ってくれてありがとう! –
その後、クライアントを押し戻します。エンジニアの仕事は、顧客が実際に必要としていること、そして技術的に可能なことをアドバイスし、把握することを盲目的に行うことだけではありません。要件とコードを書くだけであれば、半分以下の仕事をしています。 –
しかし、もう一度setExactAndAllowWhileIdleをチェックしても、アプリごとに許可される頻度に制限があります。Dozeでは1分に1回以上、15分に1回は許可されません。これは現代版のAndroidでは不可能です。電話機がアクティブな間に30秒ごとに取得することはできますが、これはおそらく十分です。 –