2012-04-01 71 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