2015-10-03 5 views
0

Я создал широковещательный приемник для прослушивания событий изменения связи. Приемник отлично работает, когда я скрою приложение, используя домашнюю кнопку. Но когда я использую кнопку «Назад» для выхода из приложения, приемник вещания перестает слушать изменения подключения. Я искал его и обнаружил, что я должен назвать широковещательный приемник из службы, но это тоже не работает над приложением. Вот мой код для вещательного приемника с сервисом.Android Broadcast приемник не работает на приложение закрыть

интернет

public class InternetService extends Service { 

    NetworkChangeReceiver networkChangeReceiver; 

    public InternetService() { 
     super(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); 
     networkChangeReceiver = new NetworkChangeReceiver(); 
     registerReceiver(networkChangeReceiver, filter); 
     return Service.START_STICKY; 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

Broadcast приемник

public class NetworkChangeReceiver extends BroadcastReceiver { 
    boolean isConnected = false; 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 
     isNetworkAvailable(context); 

    } 


    private boolean isNetworkAvailable(Context context) { 
     ConnectivityManager connectivity = (ConnectivityManager) 
       context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) { 
      NetworkInfo info = connectivity.getActiveNetworkInfo(); 
      if (info != null) { 
       if (info.isConnected()) { 
        if (!isConnected) { 
         isConnected = true; 
         Toast.makeText(getBaseContext(), "Connected to internet", Toast.LENGTH_LONG).show(); 
         Log.v("Internet", "Internet Connected"); 
         hitDataService(); 
         Intent intent = new Intent(ActivityForm.this, MyService.class); 
         startService(intent); 
        } 
        return true; 
       } 
      } 
     } 
     isConnected = false; 
     return false; 
    } 
} 

Я хочу отправить некоторые данные для обслуживания даже в приложения близко и когда мобильный подключен к интернету. Есть ли другой способ добиться такого же поведения.

Я также попытался добавить следующие строки в onCreateMethod(), но до сих пор не повезло

ComponentName receiver = new ComponentName(getBaseContext(), NetworkChangeReceiver.class); 
                PackageManager pm = getBaseContext().getPackageManager(); 
                pm.setComponentEnabledSetting(receiver, 
                  PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
                  PackageManager.DONT_KILL_APP); 
+0

Ваш вещательный приемник является внутренним классом деятельности? – Blackbelt

+0

да, это внутренний класс –

+0

Я бы начал перемещать его в отдельный класс или сделать его статическим – Blackbelt

ответ

0

Here is the Sample Code, успешно обрабатывает тревожные события, даже после того, как процесс был прекращен по DDMS.

Вы можете проверить реализацию широковещательного приемника в приведенном выше примере, который работает даже после закрытия приложения.

Надеюсь, это вам поможет.

+0

В этом примере они используют объект диспетчера сигнализации и ожидающий отступ. Могу ли я использовать его для проверки изменений подключения? –

0

Если вы хотите, чтобы приложение прослушивало NetworkChangeReceiver трансляции после закрытия приложения, убедитесь, что вы запустили InternetService, прежде чем приложение закрывается.

Предполагая, что ваша основная деятельность называется MainActivity вы можете сделать так:

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    Intent intent = new Intent(MainActivity.this, InternetService.class); 
    startService(intent); 
} 

Для NetworkChangeReceiverthis answer может быть полезным.

+0

это тоже не помогло –

+0

это исключение означает, что конструктор без параметров должен быть реализован, проверьте ошибку для номера строки, где это происходит, чтобы узнать, какой класс делает ошибку. –

+0

да я разобрал эту ошибку, но вызов службы из onDestroy не помог –

Смежные вопросы