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
Envoyer un 'Localbroadcast' en utilisant 'Loc albroadcastManager' –
allez-vous s'il vous plaît dites-moi comment puis-je l'utiliser –
Référez cette réponse https://stackoverflow.com/questions/7563301/finishing-an-activity-from-a-broadcast-receiver – ankur