2017-10-03 6 views
0

Dans mon application Android, je souhaite utiliser le récepteur de diffusion pour vérifier l'état du réseau. SO jusqu'à maintenant, j'ai créé un récepteur de diffusion à l'aide,Terminer l'activité à partir du récepteur de diffusion

public class NetworkChangeListener extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     if(intent.getExtras() != null) 
     { 
      final ConnectivityManager connectivityManager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
      final NetworkInfo ni=connectivityManager.getActiveNetworkInfo(); 

      if(ni!=null && ni.isConnectedOrConnecting()) 
      { 
       //here i want to close the activity which is open from the else block 
      } 
      else 
      { 
       Intent mIntent = new Intent(context,NetworkDialog.class); 
       mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       context.startActivity(mIntent); 

      } 
     } 
    } 
} 

comme vous pouvez le voir dans le code ci-dessus, je fais appel l'activité Networkdialog dans le bloc autre. Je voudrais mentionner que, l'NetworkDialog.class est une activité, mais j'ai mis son style comme dialogue, en utilisant le code ci-dessous dans le fichier manifeste

<activity 
      android:name=".NetworkDialog" 
      android:excludeFromRecents="true" 
      android:label="You are Offline" 
      android:screenOrientation="portrait" 
      android:theme="@style/Theme.AppCompat.Light.Dialog.Alert" 
      android:windowSoftInputMode="stateHidden" /> 

maintenant, le problème est, cette activité appelle avec succès lorsque le réseau n'est pas disponible, mais lorsque l'utilisateur se connecte à Internet, je suis incapable de terminer cette activité. (Note- Comme nous le savons tous, le récepteur de diffusion fonctionne globalement, cela signifie qu'il fonctionnera même si votre application n'est pas active, donc pour éviter cela, je n'enregistre pas le récepteur dans le fichier manifeste, je m'inscris et je ne m'inscris pas dans l'activité où je veux utiliser ce récepteur)

Je veux simplement demander, comment puis-je terminer cette activité de dialogue en premier si le bloc, qui est appelé à partir de l'intention dans le bloc autre

Voici mon code mis à jour

NetworkDialog.java

public class NetworkDialog extends AppCompatActivity { 
    public IntentFilter filter; 

    BroadcastReceiver receiver=new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 

       Toast.makeText(context,"Finish Activity here",Toast.LENGTH_SHORT).show(); 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.network_dialog); 
     setFinishOnTouchOutside(false); 

     filter=new IntentFilter(); 
     filter.addAction("com.hello.action"); 
     registerReceiver(receiver,filter); 

    } 
} 

Récepteur radio classe

public class NetworkChangeListener extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     if(intent.getExtras() != null) 
     { 
      final ConnectivityManager connectivityManager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
      final NetworkInfo ni=connectivityManager.getActiveNetworkInfo(); 

      if(ni!=null && ni.isConnectedOrConnecting()) 
      { 
       Intent local=new Intent(); 
       local.setAction("com.hello.action"); 
       context.sendBroadcast(local); 
      } 
      else 
      { 
       Intent mIntent = new Intent(context,NetworkDialog.class); 
       mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       context.startActivity(mIntent); 

      } 
     } 
    } 
} 

Je nai changé tout autre fichier

+0

Envoyer un 'Localbroadcast' en utilisant 'Loc albroadcastManager' –

+0

allez-vous s'il vous plaît dites-moi comment puis-je l'utiliser –

+0

Référez cette réponse https://stackoverflow.com/questions/7563301/finishing-an-activity-from-a-broadcast-receiver – ankur

Répondre

0
public class NetworkChangeListener extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
{ 
    if(intent.getExtras() != null) 
    { 
     final ConnectivityManager connectivityManager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     final NetworkInfo ni=connectivityManager.getActiveNetworkInfo(); 

     if(ni!=null && ni.isConnectedOrConnecting()) 
     { 
      //here You need to call local broadcast receiver 
      // Like this 
       Intent local = new Intent(); 
       local.setAction("com.hello.action"); 
       sendBroadcast(local); 


     } 
     else 
     { 
      Intent mIntent = new Intent(context,NetworkDialog.class); 
      mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(mIntent); 

     } 
     } 
    } 
} 

code pour l'activité de dialogue

public class YourDialogActivity extends Activity { 
    ArrayAdapter<String> adapter; 

    @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     IntentFilter filter = new IntentFilter(); 

     filter.addAction("com.hello.action"); 
     registerReceiver(receiver, filter); 

    } 
     BroadcastReceiver receiver = new BroadcastReceiver() { 

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

     } 
    }; 

    public void finish() { 
     super.finish(); 
     }; 
    } 
+0

désolé mais pas de chance .. Rien ne se passe –

+0

Pouvez-vous partager votre code après ces changements. – ankur

+0

J'ai essayé d'afficher toast dans onrecieve de l'émission de radiodiffusion de l'activité de dialogue ... mais je chose en utilisant le code ci-dessus, le récepteur n'appelle pas correctement –