BroadcastReceiver работает правильно (Android) - PullRequest
0 голосов
/ 01 апреля 2012

Добрый день всем! В моей программе метод onReceive в приемнике StartServiceReceiver, вызванный запуском программы (или поворотом экрана), содержит намерение «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;
        }
    }

}   
}

Ответы [ 2 ]

0 голосов
/ 01 апреля 2012

Возможно, в Манифесте нет фильтра намерений.если вы не можете найти, откуда он, просто добавьте чек в свой приемник, например:

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

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

//....
}
0 голосов
/ 01 апреля 2012

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

StartServiceFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);

до того, как вы зарегистрировали получателя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...