2013-05-08 25 views
0

我是新來的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; 
     } 

    }; 

回答

1

setFlag()和getFlags()適用於specialized flags,不適用於自定義布爾數據。你的情況,你需要使用

intent.putExtra ("tag", boolean_flag_sent); 

,並在您接收地方

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

對不起,我不理解正確的問題。但根據我的理解,Intent.getFlags()會爲您提供一個整數值,它表示與意圖本身關聯的特殊標誌的數量。在你的情況下,它是17. 上面顯示的代碼不會創建任何新的意圖,而是從其他代碼傳遞創建的意圖。檢查從何處調用此方法的代碼以及傳遞的目的是什麼

+0

對不起,我忘了代碼來創建的意圖,並通過sendBroadcast發送。我添加了它。如果我通過intent.setFlags(1)爲intent.getFlags()= 17設置了intent – Mike 2013-05-08 13:26:54