0

首先我使用API​​ 23而不是android N,所以android.net.conn.CONNECTIVITY_CHANGE應該仍然適用於我,但它不。連接變更接收器不起作用?

清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="enis.example.com.connectivitytest"> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

     <receiver android:name="com.connectivitytest.ConnectionChangeReceiver" 
      android:label="NetworkConnection"> 
      <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

ConnectionChangeReceiver

package com.connectivitytest; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.util.Log; 
import android.widget.Toast; 


public class ConnectionChangeReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); 
     NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo( ConnectivityManager.TYPE_MOBILE); 
     if (activeNetInfo != null) 
     { 
      Toast.makeText(context, "Active Network Type : " + activeNetInfo.getTypeName(), Toast.LENGTH_LONG).show(); 
       Log.v("Active Network Type : ", activeNetInfo.getTypeName()); 

     } 
     if(mobNetInfo != null) 
     { 
      Toast.makeText(context, "Mobile Network Type : " + mobNetInfo.getTypeName(), Toast.LENGTH_LONG).show(); 

     }    Log.v("Mobile Network Type : ", activeNetInfo.getTypeName()); 



    } 
} 

沒有敬酒任何消息,所以我增加了日誌信息僅僅是明確的,但沒有出現在logcat的無論是。 我甚至嘗試下面的代碼:https://gist.github.com/mjohnsullivan/1fec89187b1274dc256e 但它是完全一樣的,沒有錯誤,但沒有任何反應,沒有面包的消息,也沒有日誌消息

+0

https://stackoverflow.com/a/17181263/115145 – CommonsWare

+0

我讀過那個地方,但我不能完全理解它。我的意思是有一個接收器的要點是在後臺做事情,現在我在前臺運行一個活動?如果除了網絡可用時應該運行的任務,我不需要其他任何東西?開始時我在活動中寫什麼?以及它是如何工作的,接收機是否會偵聽可用的網絡,然後運行該活動?我很抱歉,但我很困惑。 –

回答

1

我的意思是具有接收器的全部意義在於做事情的背景,現在我在前臺運行一個活動?

用戶需要運行活動一次,將您的應用程序出了所謂的「停止狀態」,你的應用程序放置到安裝之後。此後,當你打算,直到你的接收器將工作:

  • 用戶卸載你的應用程序,或
  • 用戶進入設置,在列表中查找您的應用程序,並單擊「強制停止」按鈕

在後一種情況下,您的應用程序將返回到停止狀態,並且您的接收器將不再工作,直到用戶再次啓動您的活動爲止。

如果我除了在有網絡時應該運行的任務不需要其他任何東西,該怎麼辦?

最有可能的是,您的應用程序的行爲有些方面需要用戶配置。而且,爲此,用戶將需要一個用戶界面。

我在活動中寫什麼?

如果沒有別的,如果您打算在Play商店發貨,則需要您的隱私政策。