2017-02-21 17 views
0

Мне нужно показать уведомление, когда устройство подключено к Интернету.
Нужно ли мне постоянно обслуживать службу?Как показать уведомление о подключении к Интернету?

+0

Вы можете запустить службу все время. или вы можете просто сделать промежуточную проверку в Интернете. – Smit

ответ

0

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

0

Вам не нужно запускать службу для проверки изменений соединения.

Вы можете зарегистрировать широковещательный приемник с намерением 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

+0

Используйте только такой широковещательный приемник, когда в приложении и пользователь может выполнить действие, требующее подключения к Интернету (размещение сообщения, загрузка файла и т. Д.). В противном случае это бесполезная информация, и постоянное прослушивание изменений отнимает аккумулятор. –

1

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();} 
}} 
+1

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего после. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. – NathanOliver

+0

Примите и подтвердите ответ, если вы действительно удовлетворены этим –

+0

Тост-сообщение не отображается. – joyalshark