android - 无法在 list 文件中注册广播接收器

标签 android

  public class NetworkConnectivityListener {
        private static final String TAG = "NetworkConnectivityListener";
        private static final boolean DBG = false;
      private Context mContext;
        private HashMap<Handler, Integer> mHandlers = new HashMap<Handler, Integer>();
        private State mState;
        private boolean mListening;
        private String mReason;
        private boolean mIsFailover;
     private NetworkInfo mNetworkInfo;


    private NetworkInfo mOtherNetworkInfo;
     private ConnectivityBroadcastReceiver mReceiver;
     private class ConnectivityBroadcastReceiver extends BroadcastReceiver {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();

                if (!action.equals(ConnectivityManager.CONNECTIVITY_ACTION) ||
                    mListening == false) {
                    Log.w(TAG, "onReceived() called with " + mState.toString() + " and " + intent);
                    return;
                }

                boolean noConnectivity =
                    intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);

                if (noConnectivity) {
                    mState = State.NOT_CONNECTED;
                } else {
                    mState = State.CONNECTED;
                }

                mNetworkInfo = (NetworkInfo)
                    intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
                mOtherNetworkInfo = (NetworkInfo)
                    intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);

                mReason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
                mIsFailover =
                    intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);

                if (DBG) {
                    Log.d(TAG, "onReceive(): mNetworkInfo=" + mNetworkInfo +  " mOtherNetworkInfo = "
                            + (mOtherNetworkInfo == null ? "[none]" : mOtherNetworkInfo +
                            " noConn=" + noConnectivity) + " mState=" + mState.toString());
                }

                // Notifiy any handlers.
                Iterator<Handler> it = mHandlers.keySet().iterator();
                while (it.hasNext()) {
                    Handler target = it.next();
                    Message message = Message.obtain(target, mHandlers.get(target));
                    target.sendMessage(message);
                }
            }
        };

        public enum State {
            UNKNOWN,

            /** This state is returned if there is connectivity to any network **/
            CONNECTED,
            ONNECTED
        }


        public NetworkConnectivityListener() {
            mState = State.UNKNOWN;
            mReceiver = new ConnectivityBroadcastReceiver();
        }

        /**
         * This method starts listening for network connectivity state changes.
         * @param context
         */
        public synchronized void startListening(Context context) {
            if (!mListening) {
                mContext = context;

                IntentFilter filter = new IntentFilter();
                filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
                context.registerReceiver(mReceiver, filter);
                mListening = true;
            }
        }

        /**
         * This method stops this class from listening for network changes.
         */
        public synchronized void stopListening() {
            if (mListening) {
                mContext.unregisterReceiver(mReceiver);
                mContext = null;
                mNetworkInfo = null;
                mOtherNetworkInfo = null;
                mIsFailover = false;
                mReason = null;
                mListening = false;
            }
        }


        public void registerHandler(Handler target, int what) {
            mHandlers.put(target, what);
        }

        /**
         * This methods unregisters the specified Handler.
         * @param target
         */
        public void unregisterHandler(Handler target) {
            mHandlers.remove(target);
        }

        public State getState() {
            return mState;
        }


        public NetworkInfo getNetworkInfo() {
            return mNetworkInfo;
        }


        public NetworkInfo getOtherNetworkInfo() {
            return mOtherNetworkInfo;
        }


        public boolean isFailover() {
            return mIsFailover;
        }


        public String getReason() {
            return mReason;
        }
    }

我用这段代码注册了一个接收器来检查互联网连接可用性。我使用下面的行将它放在 list 文件中。但是当尝试这段代码时我得到以下错误。我用这段代码来检查互联网连接在我发送一些数据之前。我不知道如何在 list 文件上注册这个

02-13 16:59:31.109: E/AndroidRuntime(28123): java.lang.RuntimeException: Unable to instantiate receiver org.apache.cordova.example.NetworkConnectivityListener: java.lang.ClassCastException: org.apache.cordova.example.NetworkConnectivityListener cannot be cast to android.content.BroadcastReceiver

最佳答案

因为 NetworkConnectivityListener 不是 BroadcastReceiver 的子级,这就是错误弹出的原因 解决方案: 在Manifest文件中注册监听器如下,

<receiver android:name="org.apache.cordova.example.NetworkConnectivityListener$ConnectivityBroadcastReceiver" />

备用:

像您一样在 NetworkConnectivityListener 本身中注册 Receiver,并删除 Manifest 中的条目。

关于android - 无法在 list 文件中注册广播接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21753086/

相关文章:

android - -webkit-背景剪辑 :text not work in Android phone

android - 如何在 repo list 中为单个 git 存储库指定两个远程提取?

java - 从 SQLite 和 Cursor 比较问题中获取值(value)

android - 同一 Intent 的 Widget 上的多个 OnClick

Android firebase 推送通知最低版本问题

android - 无法解析符号android studio

c# - 如何使用函数从sqlite数据库中获取数据?

android - 将 EditText 添加到 WindowManager 后无法单击

android - 在大多数设备上使用 Google map v2 时应用程序崩溃

具有协调器布局的 ViewPager fragment 中的 Android 设计支持库 FAB