2016-09-22 2 views
0

Ich habe einen BroadcastReceiver, der nicht instanziiert oder aufgerufen wird, jede Hilfe bei dem, was ich tue, wird geschätzt.BroadcastReceiver wird nicht instanziiert

Es sollte auf Wifi Verbindung/Trennung Ereignisse reagieren, aber ist nicht, und es ist Superklasse Konstruktor wird nicht einmal aufgerufen.

MainActivity:

public class MainActivity extends AppCompatActivity { 

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

BroadcastReceiver:

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> 

Antwort

1

Der <action> Name falsch eingestellt ist. Es sollte sein: android.net.conn.CONNECTIVITY_CHANGE. Siehe "Konstanter Wert" wie beschrieben here.

+0

Danke, das hat funktioniert, obwohl ich jetzt ein anderes Thema habe :-). Warnung: Das Deklarieren eines Broadcastempfängers für android.net.conn.CONNECTIVITY_CHANGE gilt nicht mehr für Apps mit dem Ziel N und höher. Im Allgemeinen sollten sich Apps nicht auf diese Sendung verlassen und stattdessen JobScheduler oder GCMNetworkManager verwenden. – Rory

+0

Ja, dies ist eine Änderung mit Android N. Der langfristige Plan von Google besteht darin, alle Übertragungen zu entfernen, die eine App wecken könnten, die noch nicht läuft. Dies verursacht eine Menge an Leistungs-Thrash, was im Allgemeinen unnötig ist. Sie können sich jedoch dynamisch für diese Übertragung registrieren, indem Sie Ihre Aktivität verwenden. –

Verwandte Themen