2012-04-01 75 views
0

好日子的作品給大家! 在接收StartServiceReceiver我的程序的onReceive方法,通過該計劃啓動觸發(或旋轉屏幕),意圖遏制「android.net.wifi.STATE_CHANGE」。 這怎麼可能? 感謝廣播接收器正常(安卓)

public class KsivaFTPApacheActivity extends Activity { 
Context context = null; 
BroadcastReceiver StartService; 
BroadcastReceiver GetStatus; 
private final IntentFilter StartServiceFilter = new IntentFilter(); 
private final IntentFilter GetStatusFilter = new IntentFilter(); 
public static final String CUSTOM_INTENT = "com.imholynx.KsivaFTPApache.intent.start"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    StartServiceFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 
    StartServiceFilter.addAction(CUSTOM_INTENT); 
    StartService = new StartServiceReceiver(); 
    GetStatusFilter.addAction("AppService"); 
    GetStatus = new GetStatusReceiver(); 

    this.registerReceiver(StartService, StartServiceFilter); 
    this.registerReceiver(GetStatus, GetStatusFilter); 
} 
@Override 
public void onResume() { 
    super.onResume(); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    this.unregisterReceiver(StartService); 
    this.unregisterReceiver(GetStatus); 
    stopService(new Intent(this, KsivaFTPApacheService.class));  
} 
public class StartServiceReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i("State", intent.getAction()); 
     Bundle b = intent.getExtras(); 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE); 
     { 

      NetworkInfo ni = null; 
      ni = cm.getActiveNetworkInfo(); 
      if (ni != null) 
       if (ni.isConnected()) { 
        Intent inten; 
        Log.i("INFO", ((Integer) Files.size()).toString()); 
        if (!Files.isEmpty()) 
         for (int i = 0; i < Files.size(); i++) { 
          if (Files.elementAt(i).Status == false) { 
           Log.i("INFO","send "+ Files.elementAt(i).FileName); 
           inten = new Intent(context,KsivaFTPApacheService.class); 
           Log.i("INFO", ((Integer) Files.size()).toString()); 
           Log.i("INFO2", ((Integer) i).toString()); 
           inten.putExtra("FileName",Files.elementAt(i).FileName); 
           inten.putExtra("Action",Files.elementAt(i).Action); 
           inten.putExtra("ID", i); 
           context.startService(inten); 
          } 
         } 
       } 
     } 

    } 

} 

public class GetStatusReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals("AppService")) { 
      Log.i("AppService", ((Integer) intent.getIntExtra("Data", 1)).toString()); 
      Files.elementAt(intent.getIntExtra("Data", 1)).Status = true; 
     } 
    } 

} 
} 
+0

當你運行這段代碼時發生了什麼?並ü確保ü有註冊有沒有意向中的manifest.xml – 2012-04-01 15:30:46

回答

0

因爲你還說,意圖到的IntentFilter傳遞到接收器與線:

StartServiceFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 

您註冊接收

+0

如果我將添加此意圖過濾註冊接收後,接收器將無法得到這個意圖。 – 2012-04-01 17:20:33

+0

正確的,不添加它。你的問題是'爲什麼wifi狀態改變會觸發我的接收器?'我以爲你不希望他們,所以不要,如果你只是想CUSTOM_INTENT觸發接收器添加的意圖。 – NickT 2012-04-01 17:47:40

+0

對不起,我能正確翻譯。我的意思是當我旋轉手機或運行程序時觸發器被觸發。 – 2012-04-01 17:54:56

0

之前,有可能是在清單沒有意圖過濾器。如果你無法找到它來自哪裏,只需在你的接收器上添加一些支票,如下所示:

@Override 
public void onReceive(Context arg0, Intent arg1) { 

if (! arg1.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { 
    return; 
} 

//.... 
} 
+0

你試過我的方法嗎? – Superbiji 2012-04-02 15:43:34