[英]Display push notification in alert box when the app is running in the foreground
I am doing push notification in my android app that is triggered by GCM. 我正在我的Android应用程序中执行由GCM触发的推送通知。 I want to display the notification if the app is running in a alert box,if the app is not running means not in the foreground just display the status bar notification, How do you determine if the app is running and is in the foreground?is this is possible to show notification like this.now am using this code for show status bar push notification
我想显示通知,如果应用程序在警告框中运行,如果应用程序未运行意味着不在前台只显示状态栏通知,您如何确定应用程序是否正在运行并且在前台?是这可以显示这样的通知。现在使用此代码显示状态栏推送通知
NotificationManager notificationManager = (NotificationManager)
context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(icon, message, when);
String title = context.getString(R.string.app_name);
Intent notificationIntent = new Intent(context, BottomActivity.class);
// set intent so it does not start a new activity
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, title, message, intent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
// Play default notification sound
notification.defaults |= Notification.DEFAULT_SOUND;
//notification.sound = Uri.parse("android.resource://" + context.getPackageName() + "your_sound_file_name.mp3");
// Vibrate if vibrate is enabled
notification.defaults |= Notification.DEFAULT_VIBRATE;
notificationManager.notify(0, notification);
You can create a new Activity and theme as it as Dialog and check for foreground activity. 您可以像对话框一样创建新的活动和主题,并检查前台活动。 Check for below code.
检查以下代码。
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> services = activityManager
.getRunningTasks(Integer.MAX_VALUE);
boolean isActivityFound = false;
if (services.get(0).topActivity.getPackageName().toString()
.equalsIgnoreCase(context.getPackageName().toString())) {
isActivityFound = true;
}
if (isActivityFound) {
resultIntent = new Intent(context, AlertDialogNotification.class);
resultIntent.putExtra(EXTRA_ALERT_MESSAGE_BEAUTIFUL, "anyMessage");
resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(resultIntent);
}
In the manifest make the theme as Dialog for the activity. 在清单中,将主题设置为活动的对话框。 Hope it helps.
希望能帮助到你。 Let us know if you have issue.
如果您有问题,请告诉我们。
How many activities do you have? 你有多少活动? If just one, it's quite easy to keep a singleton reference to it between onResume() and onPause() (AKA when it's active), and call the activity from the receiver if it's.
如果只有一个,那么在onResume()和onPause()(AKA处于活动状态)之间保持单例引用是很容易的,如果是,则从接收者调用活动。 if you have many activities, you can achieve a similar logic by having a common base class for them.
如果你有很多活动,你可以通过为它们提供一个共同的基类来实现类似的逻辑。 Something like this:
像这样的东西:
class MyActivity: Activity
{
static private MyActivity _Current = null;
protected void onResume() //Activated
{
super.onResume();
_Current = this;
}
protected void onPause() //Deactivated
{
super.onPause();
_Current = null;
}
//This is for the receiver to call
static public PopAlert()
{
if(_Current != null)
{
new AlertDialog.Builder(_Current)
.setMessage("Hello world")
//More alert setup; use _Current as a context object
.create().show();
}
}
}
please try these 请尝试这些
public static boolean isAppIsInBackground(Context context) {
boolean isInBackground = true;
ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
for (String activeProcess : processInfo.pkgList) {
if (activeProcess.equals(context.getPackageName()))
isInBackground = false;
}
}
}
} else {
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;
if (componentInfo.getPackageName().equals(context.getPackageName())) {
isInBackground = false;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.