Вы можете достичь таргетинга в приложении ниже N.
В AndroidManifest.xml вам необходимо добавить следующее разрешение.
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Вот ваш получатель в файле manfest.
<receiver android:name=".NetworkStateReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
Вот ваш широковещательный приемник
public class NetworkStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(isDeviceOnline()){
}
}
private boolean isDeviceOnline() {
ConnectivityManager connMgr =
(ConnectivityManager) Collect.getInstance().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnected();
}
Но объявление широковещательного приемника для android.net.conn.CONNECTIVITY_CHANGE устарело для приложений, нацеленных на N и выше.
InВ общем, приложения не должны полагаться на эту трансляцию и вместо этого использовать JobScheduler или GCMNetworkManager.
Эта проблема помечает код, который либо * отрицательно влияет на срок службы батареи, либо * использует API, которые недавно изменили поведение, чтобы предотвратить чрезмерное потребление памяти и батареи фоновыми задачами.
Как правило, вы должны использовать JobScheduler или GcmNetworkManagerвместо этого.
Подробнее о том, как обновить код,
Подробнее
Планирование сетевых заданий для неизмеренных соединений
При использовании класса JobInfo.Builder для создания объекта JobInfo примените метод setRequiredNetworkType () и передайте JobInfo.NETWORK_TYPE_UNMETERED в качестве параметра задания.В следующем примере кода показано, что служба запускается, когда устройство подключается к неизмеренной сети и заряжается:
public static final int MY_BACKGROUND_JOB = 0;
...
public static void scheduleJob(Context context) {
JobScheduler js =
(JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
JobInfo job = new JobInfo.Builder(
MY_BACKGROUND_JOB,
new ComponentName(context, MyJobService.class))
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
.setRequiresCharging(true)
.build();
js.schedule(job);
}
Подробнее см. Здесь