4

對於Nougat下面的API,您可以在清單中聲明一個訂閱CONNECTIVITY_CHANGES的接收器。這使我可以監聽網絡連接的變化,無論連接是打開還是關閉,並允許我執行任務,即使我的應用程序沒有運行。即使您的應用程序未運行,您如何檢測牛軋糖上的網絡連接丟失?

在牛軋糖上,這似乎不可能。我知道,如果存在網絡連接,Nougat上的JobScheduler可用於在後臺執行某些任務,但似乎沒有辦法監聽網絡連接丟失。

換句話說,我希望能夠聽到手機何時失去了所有連接(Wi-Fi,LTE等),並在發生這種情況時在後臺執行某些操作。這對牛軋糖可能嗎?

+0

您是否嘗試過創建一個'JobInfo'用'setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE)',另一個'setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)'? –

+0

您可能需要謹慎行事 - 對蜂窩設備收音機的更改確實頻繁發生 - 不要期望它會停止,否則可能會使用戶手機非常忙碌。 – apelsoczi

+0

@JaredRummler NETWORK_TYPE_NONE不會做你認爲它做的事。這基本上意味着運行這個工作,不管你有什麼樣的網絡連接而不是這個意義:只有在沒有網絡時才做這個工作 –

回答

0

可以使用NetworkChangeReceiver

public class NetworkChangeReceiver extends BroadcastReceiver { 

private static final String LOG_TAG = "NetworkChangeReceiver"; 
private boolean isConnected = false; 
Context mContext; 

@Override 
public void onReceive(Context context, Intent intent) { 
    Log.v(LOG_TAG, "Receieved notification about network status"); 
    isNetworkAvailable(context); 
    mContext=context; 

} 

public boolean isNetworkAvailable(Context context) { 
    ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (connectivity != null) { 
     NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
     if (info != null) { 
      for (int i = 0; i < info.length; i++) { 
       if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
        if (!isConnected) { 
         Log.v(LOG_TAG, "Now you are connected to Internet!"); 
         Toast.makeText(context, R.string.internet_available, Toast.LENGTH_SHORT).show(); 

         isConnected = true; 


        } 
        return true; 
       } 
      } 
     } 
    } 
    Log.v(LOG_TAG, "You are not connected to Internet!"); 
    Toast.makeText(context, R.string.internet_not_available, Toast.LENGTH_SHORT).show(); 




    isConnected = false; 
    return false; 
} 
+0

在nougat上手動註冊+ –

+1

@ f.khantsis如果這需要在後臺進行,沒有打開任何活動,您會在何處執行此操作? –

+0

@the_gesslar在您的應用程序類中使用它。 –

相關問題