2016-09-22 103 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的长期计划是删除所有可能唤醒尚未运行的应用程序的广播。这导致大量的功率通常是不必要的。尽管如此,您可以使用您的活动动态注册此广播。 –