广播接收器未被调用

时间:2015-05-19 19:19:17

标签: android android-intent service broadcastreceiver

我使用了广播接收器,当它在Android设备上找到互联网连接时被调用,以检查广播接收器是否正在运行我尝试在logcat中打印它。我没有显示任何消息。 我正在调用我的广播接收器中的服务,该服务也没有被调用。 我已经看到类似的堆栈溢出问题,但我仍然无法解决问题。 很多天以来我一直坚持这个。有人可以帮我解决这个问题吗?

这是我的广播接收器:

public final class ConnectivityReceiver extends BroadcastReceiver
{

    @Override
    public void onReceive(Context context, Intent intent)
    {
        Log.e("BRRRRRRRRRR","works!!!! In Broadcast Receiver...!!!");


        final AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        final PendingIntent wakeupIntent = PendingIntent.getService(context, 0,
                new Intent(context, LocationUpdate.class), PendingIntent.FLAG_UPDATE_CURRENT);

       final boolean hasNetwork = !intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
        if (hasNetwork)
        {

            // start service now for doing once
            context.startService(new Intent(context, LocationUpdate.class));

            // schedule service for every 15 minutes
            alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                    SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_FIFTEEN_MINUTES,
                    AlarmManager.INTERVAL_FIFTEEN_MINUTES, wakeupIntent);
        }
        else
        {
            alarmManager.cancel(wakeupIntent);
        }

    }
 }

的Manifest.xml

 <receiver    android:name="info.androidhive.loginandregistration.ConnectivityReceiver" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
    </intent-filter>
</receiver>

2 个答案:

答案 0 :(得分:0)

你的接收器看起来很好。请检查您的包裹名称是否正确。在AndroidManifest.xml注册接收器应该足够了,但如果由于某种原因它没有工作,你可以尝试不同的解决方案。

尝试以下列方式以编程方式注册您的接收器,例如在您的活动的onResume()方法中:

@Override
protected void onResume() {
   super.onResume();
   ConnectivityReceiver receiver = new ConnectivityReceiver();
   IntentFilter filter = new IntentFilter();
   filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
   filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
   registerReceiver(receiver, filter);
}

您还应该在活动中使用onPause()方法取消注册您的接收器:

@Override
protected void onPause() {
   super.onPause();
   unregisterReceiver(receiver);
}

如果它没有帮助,您可以在标记内添加AndroidManifest.xml文件的新权限。

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

答案 1 :(得分:0)

由于您正在检查连接更改,我建议您先检查您的应用是否有权连接到互联网。

该应用访问互联网的权限将是 - ctrl + s