Мне нужно показать уведомление, когда устройство подключено к Интернету.
Нужно ли мне постоянно обслуживать службу?Как показать уведомление о подключении к Интернету?
ответ
Вам нужен широковещательный приемник для получения изменений состояния сети, затем передайте эти данные службе, которая не является связанной службой, и не создайте уведомление, или вы можете создать свое уведомление в своем широковещательном приемнике.
Вам не нужно запускать службу для проверки изменений соединения.
Вы можете зарегистрировать широковещательный приемник с намерением android.net.conn.CONNECTIVITY_CHANGE
.
Обратите внимание, что
Программы ориентации Android 7.0 (уровень API 24) и выше, не получают эту передачу, если они объявляют приемник вещания в их манифеста. Приложения будут по-прежнему получать трансляции, если они регистрируют свой BroadcastReceiver с Context.registerReceiver(), и этот контекст все еще действителен.
Ссылка для получения дополнительной информации: https://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION
Похожий вопрос: https://stackoverflow.com/a/2295044/2174489
Используйте только такой широковещательный приемник, когда в приложении и пользователь может выполнить действие, требующее подключения к Интернету (размещение сообщения, загрузка файла и т. Д.). В противном случае это бесполезная информация, и постоянное прослушивание изменений отнимает аккумулятор. –
ConnectivityReceiver.java
public class ConnectivityReceiver
extends BroadcastReceiver {
public static ConnectivityReceiverListener connectivityReceiverListener;
public ConnectivityReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent arg1) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
if (connectivityReceiverListener != null) {
connectivityReceiverListener.onNetworkConnectionChanged(isConnected);
}
}
public static boolean isConnected() {
ConnectivityManager
cm = (ConnectivityManager) MyApplication.getInstance().getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
}
public interface ConnectivityReceiverListener {
void onNetworkConnectionChanged(boolean isConnected);
}}
MyApplication.java
public class MyApplication extends Application {
private static MyApplication mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized MyApplication getInstance() {
return mInstance;
}
public void setConnectivityListener(ConnectivityReceiver.ConnectivityReceiverListener listener) {
ConnectivityReceiver.connectivityReceiverListener = listener;
}}
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:name=".MyApplication"
android:allowBackup="true"
...
<receiver
android:name=".ConnectivityReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
...
</application>
Activity.class
public class MainActivity extends AppCompatActivity
implements ConnectivityReceiver.ConnectivityReceiverListener {
...
@Override
protected void onResume() {
super.onResume();
// register connection status listener
MyApplication.getInstance().setConnectivityListener(this);
}
...
@Override
public void onNetworkConnectionChanged(boolean isConnected) {
if(isConnected){
Toast.makeText(context, "Internet Connected", Toast.LENGTH_SHORT).show();
}else{Toast.makeText(context, "Internet not Connected", Toast.LENGTH_SHORT).show();}
}}
Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего после. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. – NathanOliver
Примите и подтвердите ответ, если вы действительно удовлетворены этим –
Тост-сообщение не отображается. – joyalshark
Вы можете запустить службу все время. или вы можете просто сделать промежуточную проверку в Интернете. – Smit