android意图还有其他标志

android意图还有其他标志,android,android-intent,Android,Android Intent,我是android开发的新手,我正在看以前在这里工作的人的代码。我检查是否连接到服务器。这非常有效(参见D/ConnectivityChecker(29802):isOnline=true)。然后我创建一个新的Intent并设置一个标志(publicstaticintonline_flag=1),如Intent.setFlags 1所示。然后我通过sendBroadcast将此意图发送到我的connectionChangeReceiver 如果我读出意向标志,它不是1,而是17 这是connec

我是android开发的新手,我正在看以前在这里工作的人的代码。我检查是否连接到服务器。这非常有效(参见D/ConnectivityChecker(29802):isOnline=true)。然后我创建一个新的Intent并设置一个标志(publicstaticintonline_flag=1),如Intent.setFlags 1所示。然后我通过sendBroadcast将此意图发送到我的connectionChangeReceiver

如果我读出意向标志,它不是1,而是17

这是connectionChangeReceiver的代码:

/**
 * Receives notifications about connectivity changes
 */
private BroadcastReceiver connectionChangeReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("connectionChangeReceiver","Intent.Flags(): '" + intent.getFlags() + "' ICM.ONLINE_FLAG: '" + InternetConnectionManager.ONLINE_FLAG+"'");
        setOnlineMode(intent.getFlags() == ICM.ONLINE_FLAG);
    }

};
这是logcat:

05-08 14:28:05.615: V/ICM(29802): checkConnectivity
05-08 14:28:05.615: V/ICM(29802): ConnectivityChecker.execute()
05-08 14:28:05.620: D/ConnectivityChecker(29802): doInBackground
05-08 14:28:05.620: D/ConnectivityChecker(29802): Host: 192.168.2.109 Port:8000
05-08 14:28:05.670: V/ICM(29802): checkConnectivity
05-08 14:28:08.670: D/ConnectivityChecker(29802):  isOnline=true
05-08 14:28:08.670: D/ConnectivityChecker(29802): intent.setFlags 1
05-08 14:28:08.670: D/ConnectivityChecker(29802): sendBroadcast(intent)
05-08 14:28:08.675: D/connectionChangeReceiver(29802): Intent.Flags(): '17' ICM.ONLINE_FLAG: '1'
intentFlag由ConnectionVityChecker设置为1,但connectionChangeReceiver获得17。我不知道为什么

我检查了两次。这是代码中唯一将创建意图并调用函数setFlags()的部分。变量ONLINE_FLAG设置为“public static int ONLINE_FLAG=1”;它与我可以使用ICM.ONLINE_FLAG调用的变量相同

我不知道为什么意图的旗帜是17

也许有人能帮我修一下

编辑: 抱歉,我忘记了创建意图的代码:

private class ConnectivityChecker extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {
            Log.d("ConnectivityChecker","doInBackground");
            Socket socket = null;
            boolean online = false;
            try {
                Log.d("ConnectivityChecker","Host: "+ConnectionHandler.host+" Port:"+ConnectionHandler.port);
                socket = new Socket();
                socket.bind(null);
                InetSocketAddress address = new InetSocketAddress(ConnectionHandler.host, ConnectionHandler.port);
                socket.connect(address, TIMEOUT * 1000);
                online = socket.isConnected();
                socket.close();
            } catch (IOException e) {
                // Nothing to do since we are just interested in the
                // availability of the server
            }
            Log.d("ConnectivityChecker"," isOnline=" + online);
            Log.d("ConnectivityChecker"," new Intent (" + CONNECTIVITY_ACTION+")");
            Intent intent = new Intent(CONNECTIVITY_ACTION);
            if (online){
                intent.setFlags(ONLINE_FLAG);
                Log.d("ConnectivityChecker","intent.setFlags " + ONLINE_FLAG);

            }

            isServerAvailable = online;

            Log.d("ConnectivityChecker","sendBroadcast(intent)");
            sendBroadcast(intent);

            return null;
        }

    };
私有类ConnectivityChecker扩展异步任务{
@凌驾
受保护的Void doInBackground(Void…参数){
Log.d(“连接检查”、“背景”);
套接字=空;
布尔在线=假;
试一试{
Log.d(“ConnectivityChecker”,“主机:+ConnectionHandler.Host+”端口:+ConnectionHandler.Port”);
套接字=新套接字();
socket.bind(null);
InetSocketAddress address=新的InetSocketAddress(ConnectionHandler.host,ConnectionHandler.port);
socket.connect(地址,超时*1000);
online=socket.isConnected();
socket.close();
}捕获(IOE异常){
//没什么可做的,因为我们只是对
//服务器的可用性
}
Log.d(“ConnectivityChecker”,“isOnline=“+online”);
Log.d(“连接检查”、“新意图”(+CONNECTIVITY_ACTION+));
意向意向=新意向(连通性行动);
如果(在线){
意图.设置标志(在线标志);
Log.d(“ConnectivityChecker”、“intent.setFlags”+ONLINE_标志);
}
isServerAvailable=在线;
Log.d(“ConnectivityChecker”、“sendBroadcast(intent)”);
发送广播(意图);
返回null;
}
};

对不起,我没有正确理解您的问题。但据我所知,Intent.getFlags()将为您提供一个整数值,表示与Intent本身关联的特殊标志的数量。你的情况是17。 上面显示的代码不会创建任何新的意图,而是从其他代码传递创建的意图。检查从何处调用此方法的代码以及传递的目的是什么

setFlag()和getFlags()是用于,而不是用于自定义布尔数据。在您的情况下,您需要使用

intent.putExtra ( "tag", boolean_flag_sent );
在你的接待处

boolean_flag_received = intent.getBooleanExtra( "tag", false );

抱歉,我忘记了创建意图并通过sendBroadcast发送的代码。我加上去了。如果我通过intent.setFlags(1)设置intent,为什么intent.getFlags()=17?