2012-04-01 19 views
0

Добрый день всем! В моей программе onReceive метод в приемнике StartServiceReceiver, запускаемый при запуске программы (или вращении экрана), намерение содержит «android.net.wifi.STATE_CHANGE». Как это может быть? БлагодаряBroadcastReceiver работает правильно (Android)

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

Что произошло, когда u запускал этот код? и вы уверены, что у вас есть регистрация в намерении в manifest.xml –

ответ

0

Потому что вы добавили, что намерение к IntentFilter передается на приемник с линией:

StartServiceFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 

до регистрации приемника

+0

Если я добавлю этот фильтр намерений после регистрации получателя, получатель не получит этого намерения. –

+0

Правильно, не добавляйте его вообще. Ваш вопрос: «Почему изменения состояния wifi запускают мой приемник?» Я думал, что вы этого не хотели, поэтому не добавляйте это намерение, если вы просто хотите, чтобы CUSTOM_INTENT запускал приемник. – NickT

+0

Извините, могу ли я правильно перевести. Я имею в виду, что приемник срабатывает, когда я поворачиваю телефон или запускаю программу. –

0

вероятно нет никакого намерения фильтра в манифесте. если вы не можете найти, откуда он находится, просто добавьте чек в свой Получатель, например:

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

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

//.... 
} 
+0

Вы пробовали мой подход? – Superbiji