我是新來的android開發人員,我正在查看在這裏工作過的人的代碼。我檢查連接到服務器。這很好(參見D/ConnectivityChecker(29802):isOnline = true)。然後我創建一個新的Intent並設置一個標誌(public static int ONLINE_FLAG = 1),你可以在intent.setFlags 1中看到。然後我通過sendBroadcast將這個intent發送到我的connectionChangeReceiver。android intent有其他標誌
如果我讀出intents標誌,它不是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由ConnectivityChecker設置爲1,但connectionChangeReceiver得到一個17,我不知道爲什麼?
我檢查了兩次。這是創建Intent的代碼的唯一部分,並且將調用函數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;
}
};
對不起,我忘了代碼來創建的意圖,並通過sendBroadcast發送。我添加了它。如果我通過intent.setFlags(1)爲intent.getFlags()= 17設置了intent – Mike 2013-05-08 13:26:54