简体   繁体   English

当应用程序在前台运行时,在警告框中显示推送通知

[英]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.

相关问题 当应用程序在前台运行时,我没有收到推送通知 - I dont get push notification when the app is running in the foreground 如何在应用前台制作信号推送通知警报 - How to make onesignal push-notification alert in app foreground 当应用程序处于前台时发送推送通知 - Push notification is sent when app is in foreground 单击“推送”通知后应用程序进入前台时,如何显示自定义对话框 - How to display custom dialog box when application comes to foreground after clicking on Push notification 当应用程序在前台使用 Firebase 时不显示通知 - Notification not display when app in foreground using Firebase 使用应用程序时(在前台运行)请勿调用推送通知 - Don't invoke push notification when app is being used (running in foreground) 当应用程序不在后台或前台时,无法将通知推送到通知管理器 - When the app is not in background or foreground, not able push Notification to Notification manager 在应用运行时推送通知 - Push Notification when app is running 当应用未运行时,Android设备未响应远程推送通知而显示警报 - Android device not showing alert in response to remote push notification when the app is not running 在Android中-当应用程序处于前台时如何防止Firebase推送通知? - In android - How to prevent Firebase push notification when app is in foreground?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM