完成 activity 从广播接收器开始
Finish activity started from broadcast receiver
在我的 android 应用程序中,我想使用广播接收器来检查网络状态。
到目前为止,我已经使用
创建了一个广播接收器
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);
}
}
}
}
如您在上面的代码中所见,我在 else 块中调用 Networkdialog activity。
我想提一下,
NetworkDialog.class 是 activity,但我已将其样式设置为对话框,使用清单文件中的以下代码
<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" />
现在,问题是,这个activity在网络不可用的情况下调用成功,
但是当用户连接到互联网时,我无法完成这个 activity.
(注意-众所周知,广播接收器在全球范围内工作,这意味着即使您的应用程序未激活它也会工作,因此为防止这种情况,我没有在清单文件中注册接收器,我正在注册并在我想使用该接收器的 activity 中注销它)
所以我只想问,如何在第一个 if 块中完成该对话框 activity,它是从 else 块中的意图调用的
这是我更新的代码
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);
}
}
广播接收器class
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);
}
}
}
}
我没有更改任何其他文件
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);
}
}
}
}
对话框代码 activity
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();
};
}
在我的 android 应用程序中,我想使用广播接收器来检查网络状态。 到目前为止,我已经使用
创建了一个广播接收器 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);
}
}
}
}
如您在上面的代码中所见,我在 else 块中调用 Networkdialog activity。 我想提一下, NetworkDialog.class 是 activity,但我已将其样式设置为对话框,使用清单文件中的以下代码
<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" />
现在,问题是,这个activity在网络不可用的情况下调用成功, 但是当用户连接到互联网时,我无法完成这个 activity.
(注意-众所周知,广播接收器在全球范围内工作,这意味着即使您的应用程序未激活它也会工作,因此为防止这种情况,我没有在清单文件中注册接收器,我正在注册并在我想使用该接收器的 activity 中注销它)
所以我只想问,如何在第一个 if 块中完成该对话框 activity,它是从 else 块中的意图调用的
这是我更新的代码
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);
}
}
广播接收器class
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);
}
}
}
}
我没有更改任何其他文件
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);
}
}
}
}
对话框代码 activity
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();
};
}