在我正在开发的应用程序中,我有一些代码试图将信息提交到互联网。如果无法建立连接,我会弹出一条Toast消息,指示用户检查网络连接。
Toast.makeText(getApplicationContext(), "Check network connection.", Toast.LENGTH_SHORT).show();
我遇到的问题是无论用户在看什么,都会出现toast消息!即使用户在不同的应用程序中,我的应用程序在后台运行!如果网络活动失败,我会向用户发送通知,这不是理想的行为。我只希望在用户处于生成网络活动的活动中时显示Toast消息。有没有办法做到这一点?
如果这不可能,我的想法是在我的活动中加入某种视觉元素 - 而不是显示祝酒信息。
谢谢!
答案 0 :(得分:1)
您可以使用布尔类成员来跟踪活动状态更改。
public class YourClass extends Activity {
private boolean mIsResumed = false;
@Override
public void onResume() {
super.onResume();
mIsResumed = true;
}
@Override
public void onPause() {
super.onPause();
mIsResumed = false;
}
public boolean isResumed() {
return mIsResumed;
}
}
然后你可以使用这样的东西:
if (isResumed()) {
//show Toast
}
答案 1 :(得分:0)
保持简单,尝试在Activity中添加一个布尔标志,并在onResume中将其值设置为 true &在onPause中 false 。如果布尔标志为 true ,则显示toast。
答案 2 :(得分:0)
使用动态BroadcastReceiver
。当事情发生时,您的后台服务将广播Intent
。您的所有应用活动都会注册一个动态BroadcastReceiver
,它会监听这些活动。当这样的事件发生时,它将显示祝酒。当你的活动都没有运行时,什么都不会发生。
public static final ACTION_SOMETHING = BuildConfig.APPLICATION_ID + ".ACTION_SOMETHING";
public void doSomething() {
// ...
// Show toast if app is running. Or let the app react however you please.
LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent(ACTION_SOMETHING));
// ...
}
当然,您可以在Intent
中添加其他信息作为附加内容,并在BroadcastReceiver
中访问它们。
private final IntentFilter onSomethingIntentFilter = new IntentFilter(MyService.ACTION_SOMETHING);
private final BroadcastReceiver onSomething = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// This check seems redundant but it's not. Google it.
if (MyService.ACTION_SOMETHING.equals(intent.getAction()) {
// Show toast here.
}
}
};
public void onResume() {
super.onResume();
// Start listening for events when activity is in foreground.
LocalBroadcastManager.getInstance(this).registerReceiver(onSomething, onSomethingIntentFilter);
}
public void onPause() {
super.onPause();
// Stop listening as soon as activity leaves foreground.
try {
LocalBroadcastManager.getInstance(this).unregisterReceiver(onSomething);
} catch (IllegalArgumentException ex) {}
}
您可能希望将此代码提取到公共活动父级BaseActivity
,因此您不必重复此操作。
这是Provider-Subscriber模式的常见情况。另一个实现是EventBus。