2016-09-22 77 views
0

我有一個未被實例化或調用的BroadcastReceiver,對我所做的任何幫助表示讚賞。沒有實例化BroadcastReceiver

它應該對wifi連接/斷開事件作出響應,但不是,它的超類構造函數甚至沒有被調用。

MainActivity:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
} 

廣播接收器:

public class ConnectivityChangeReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.v(TAG, "action: " + intent.getAction()); 
     Log.v(TAG, "component: " + intent.getComponent()); 
    } 
} 

的AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.test"> 

    <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"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver 
      android:name=".ConnectivityChangeReceiver" 
      android:enabled="true"> 
      <intent-filter> 
       <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

回答

1

<action>的名稱設置不正確。它應該是:android.net.conn.CONNECTIVITY_CHANGE。請參閱here所述的「常量值」。

+0

感謝這工作,但我現在有另一個問題:-)。警告:爲適用於N和更高版本的應用程序已棄用聲明android.net.conn.CONNECTIVITY_CHANGE的broadcastreceiver。一般來說,應用程序不應該依賴此廣播,而是使用JobScheduler或GCMNetworkManager – Rory

+0

是的,這是對Android N的改變。Google的長期計劃是刪除所有可能喚醒尚未運行的應用程序的廣播。這導致大量的功率通常是不必要的。儘管如此,您可以使用您的活動動態註冊此廣播。 –