1

Uygulamamın İnternet'e her bağlandığında ve tersi olduğunda bir şeyler yapması gerekiyor. Ancak, bu uygulamayı DIŞINDA yapmam gerekiyor. Stackoverflow hakkında bir sürü fikir ve yardım var ama uygulama her zaman WITHIN. AlarmManager'ın uygulama dışında çalıştığını biliyorum, ancak her 5 dakikada bir internet bağlantısının olup olmadığını kontrol etmeye çalışırsam sadece aküyü boşaltabiliyordum. İstediğim şey, bir şey indirmek için uygulamanın dışındaki bağlantıyı kontrol etmektir.Android İnternet Bağlantı denetleyicisi Uygulamanın DIŞARI

Ayrıca, Intent Service uygulamasının da dışında çalışabileceğini öğrendim. Bunu Wakeful Broadcast Receiver’ın içine koymaya çalıştım. Ancak, hala çağrılmıyor.

Dışarıda birisi bana yardımcı olabilir mi? Teşekkürler!

İşte benim Uykusuzken Yayını Alıcı

public class ConnectivityOutsideAppReceiver extends WakefulBroadcastReceiver { 

    private static final String LOG_TAG = ConnectivityOutsideAppReceiver.class.getSimpleName(); 

    private ConnectivityManager connectivityManager; 
    private static boolean connection = false; 

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

     ComponentName comp = new ComponentName(context.getPackageName(), 
       ConnectivityOutsideAppService.class.getName()); 

     // Start the service, keeping the device awake while it is 
     // launching. 
     startWakefulService(context, (intent.setComponent(comp) 

     )); 
    } 

} 

Bu

public class ConnectivityOutsideAppService IntentService uzanır Niyet Hizmetidir var {

private static final String LOG_TAG = ConnectivityOutsideAppService.class.getSimpleName(); 
private ConnectivityManager connectivityManager; 
private static boolean connection = false; 
private Context context; 

public ConnectivityOutsideAppService() { 
    super(ConnectivityOutsideAppService.class.getSimpleName()); 
    this.context = context; 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    connectivityManager = 
      (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    checkConnectionOnDemand(); 

    Log.e(LOG_TAG, " ## onHandleIntent##"); 
    if (connection == true 
      && intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, 
      false)) { 
     Log.e(LOG_TAG, " ## connection == true ##"); 
     connection = false; 
    } else if (connection == false 
      && !intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, 
      false)) { 
     Log.e(LOG_TAG, " ## connection == false ##"); 
     connection = true; 
    } 

    ConnectivityOutsideAppReceiver.completeWakefulIntent(intent); 
} 

public static boolean hasConnection() { 
    return connection; 
} 

private void checkConnectionOnDemand() { 
    Log.e(LOG_TAG, " ## checkConnectionOnDemand ##"); 
    final NetworkInfo info = connectivityManager.getActiveNetworkInfo(); 
    if (info == null || info.getState() != NetworkInfo.State.CONNECTED) { 
     if (connection == true) { 
      Log.e(LOG_TAG, " ## connection == true ##"); 
      connection = false; 
     } 
    } else { 
     if (connection == false) { 
      Log.e(LOG_TAG, " ## connection == false ##"); 
      connection = true; 
     } 
    } 
} 
} 

Bu benim Android Manifest

<uses-permission android:name="android.permission.INTERNET" /> 

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

    <service 
     android:name="com.timetrackermobilelog.BusinessServices.ConnectivityOutsideAppService" 
     android:exported="false"/> 

    <receiver android:name="com.timetrackermobilelog.Utilities.ConnectivityOutsideAppService" 
       android:enabled="true" 
       android:process=":remote"> 

     <intent-filter android:priority="1000" > 
      <action android:name="com.timetrackermobilelog.Utilities.ConnectivityOutsideAppService" /> 
      <category android:name="com.Utilities" /> 
     </intent-filter> 
    </receiver> 
olduğunu

Alıcıyı Aktivitenin içine kaydetmeyi denedim ama işe yaramıyor.

IntentFilter intentFilter = new IntentFilter("com.pointwest.timetrackermobilelog.Utilities.ConnectivityOutsideAppReceiver"); 
ConnectivityOutsideAppReceiver connectivityOutsideAppReceiver = new ConnectivityOutsideAppReceiver(); 
registerReceiver(connectivityOutsideAppReceiver, intentFilter); 

Kaçırdığım bir şey var mı?

+1

(Özel işleminizin yerine http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html#MonitorChanges). –

+0

kodunuzda hata ayıklama var mı ..? Nerede sorun çıkarmalısın? –

+0

Merhaba @MikeM. Bunu bir çıkaracağım ve size döneceğim. –

cevap

2

@Mike M., sadece birkaç satırlık değişiklikle yanıt verdiğine teşekkürler.

Android Manifest yılında

, bunu değiştirin:,

<intent-filter android:priority="1000" > 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
      </intent-filter> 

Ve Hizmet onHandleIntent olarak değiştirin: [ `CONNECTIVITY_CHANGE` eylem] için apaçık daki Alıcı Kayıt

connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
İlgili konular