仅当应用程序未运行时显示推送通知 android

2023-11-23

在我的应用程序中,我集成了推送通知GCM。每当通知出现时它就工作正常。但即使用户位于应用程序内部,也会出现推送通知。我希望仅当用户位于应用程序外部时才显示通知。

这是我的推送通知代码:

Gcm广播接收器

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    ComponentName comp = new ComponentName(GCMNotificationIntentService.class.getPackage().getName(), 
            GCMNotificationIntentService.class.getName());
    startWakefulService(context, (intent.setComponent(comp)));
    setResultCode(Activity.RESULT_OK);
}
}

GCMnotificationIntentService.Class

public class GCMNotificationIntentService extends IntentService {

public static int notificationId = 10;
private NotificationManager mNotificationManager;
NotificationCompat.Builder builder;
private boolean login_status = false;


public GCMNotificationIntentService() {
    super("GcmIntentService");
}

public static final String TAG = GCMNotificationIntentService.class.getSimpleName();

@Override
protected void onHandleIntent(Intent intent) {
    Bundle extras = intent.getExtras();
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
    // The getMessageType() intent parameter must be the intent you received
    // in your BroadcastReceiver.
    String messageType = gcm.getMessageType(intent);

    if ( !extras.isEmpty() ) { // has effect of unparcelling Bundle
        /*
         * Filter messages based on message type. Since it is likely that
         * GCM will be extended in the future with new message types, just
         * ignore any message types you're not interested in, or that you
         * don't recognize.
         */
        if ( GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType) ) {
            sendNotification("Send error: " + extras.toString());
        } else if ( GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType) ) {
            sendNotification("Deleted messages on server: " + extras.toString());
            // If it's a regular GCM message, do some work.
        } else if ( GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType) ) {
            sendNotification(extras.getString("message"));
            Log.i(TAG, "Received: " + extras.toString());
        }
    }
    // Release the wake lock provided by the WakefulBroadcastReceiver.
    GcmBroadcastReceiver.completeWakefulIntent(intent);
}

private void sendNotification(String msg) {

    mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle(getString(R.string.notification_title))
            .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)).setContentText(msg);
    Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    mBuilder.setSound(uri);
    mBuilder.setContentIntent(contentIntent);
    mBuilder.setAutoCancel(true);
    mNotificationManager.notify(notificationId++, mBuilder.build());
}
}

在清单文件中

 <receiver
        android:name=".GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="com.medlife.deliveryagent" />
        </intent-filter>
    </receiver>
  <service android:name=".GCMNotificationIntentService" />

任何建议将不胜感激!


执行类似的操作,通过调用下面的方法来检查您的应用程序是否位于前台,并根据返回值 true 或 false 完成剩下的工作

public boolean checkApp(){
       ActivityManager am = (ActivityManager) this
                .getSystemService(ACTIVITY_SERVICE);

        // get the info from the currently running task
        List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);

        ComponentName componentInfo = taskInfo.get(0).topActivity;
        if (componentInfo.getPackageName().equalsIgnoreCase("YourPackage")) {
            return true;
        } else {
           return false;
        }
  } 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅当应用程序未运行时显示推送通知 android 的相关文章

  • Android 中用虚拟键盘捕捉按键按下的情况?

    使用物理键盘 您可以使用按键监听器 http developer android com reference android text method KeyListener html 就像是 myEditText setOnKeyListe
  • Android 上有哪些字体可用? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道安卓有一个字体集合 http www ascenderfonts com store search
  • 对话框上的 EditText 不返回任何文本

    我太累了 找不到错误 我没有发现任何错误 但我没有从 editText 收到任何文本 请看下面的代码 活动密码 xml
  • 使用库来维护免费/付费的应用程序版本

    维护免费 付费应用程序版本的共识似乎是使用库 并从每个活动中设置一个标志 以从代码库中获取不同的功能 这有多安全 据我了解 一个人可以root他们的手机 获取APK 并且可以对其进行反编译 即使代码被混淆 也不难看出该应用程序是带有标志的包
  • 如何在 Android 中使用 Assets 中预加载的 SQLite 数据库

    我想用preloaded database在我的应用程序中意味着尝试在安装 apk 时获取数据库 以便可以使用已保存在其中的数据 我复制了 成分 db 文件位于资产文件夹中 并使用以下代码 但这会出现错误 从资源文件复制数据库时出现问题 我
  • 使用 android AudioTrack 在左或右扬声器中播放声音

    我正在应用程序中的 AudioTrack 的帮助下播放声音 但我想在特定扬声器 耳朵中播放声音 即左扬声器或右扬声器或两个扬声器 以下代码是我用来播放声音的 private AudioTrack generateTone double fr
  • 安卓无法玩ogg

    有人知道这是什么意思吗 ogg使用phonegap is Media播放 它使用MediaPlayer 05 26 15 41 50 007 1160 3631 E AudioFlinger no more track names avai
  • 毕加索动画加载图像

    我有以下代码在毕加索中加载图像 使用可绘制的占位符在图像下载时显示 不过 我想要的是一个动画旋转进度条样式的旋转器 它可以在图像加载时不断地旋转 就像我在大多数专业应用程序中看到的那样 毕加索似乎不支持这一点 只支持静态图像可绘制 有没有办
  • 在 Android 中长按时从操作模式中删除后退/主页按钮

    我已经在里面长按实现了上下文操作模式recycler view 为此我打电话给ActionModeCallback从创建动作模式开始 创建动作模式时 默认显示后退箭头 检查如下 单击后退箭头 操作模式将关闭 现在我想要hide or rem
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • Renderscript 示例构建错误

    所以我想尝试使用 RenderScript 的示例 并在 Eclipse 中导入了 HelloWorld 但它给了我这样的错误 2011 10 25 13 10 48 HelloWorld home mileoresko workspace
  • 尝试在模拟器上安装第二个 flutter 应用程序时出错

    我创建了一个简单的 flutter 应用程序并在 android 模拟器上运行它 效果还不错 现在我创建了另一个 当我尝试在模拟器上运行它时 我得到 Error ADB exited with exit code 1 adb failed
  • finish() 完成活动但它仍然在后台

    我有一个关于 android studio 中活动的 finish 方法的问题 我有这个简单的代码 public class MainActivity extends AppCompatActivity Override protected
  • 无法获取 Facebook 传入请求

    我正在尝试在我的 Facebook android 游戏应用程序中实现发送数据并接受该数据 我正在关注https developers facebook com docs android send requests notification
  • 从 TextView 中显示的数字中删除小数点[重复]

    这个问题在这里已经有答案了 对于我的简单计算器 我将结果显示在TextView 但它总是显示小数 我怎样才能删除它们 这是我的代码 public class MainActivity extends Activity implements
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 在 Honeycomb Android 3.0 中显示 Action Bar 菜单项的图标

    我正在使用 Honeycomb android 3 0 开发 Android 应用程序 我正在尝试在 Action Bar 中显示菜单 菜单有一个图标和标题 当我们单击菜单项时 它会以下拉列表的形式显示其项目 它是下拉列表中带有项目名称但不
  • 如何在没有 firebase 的情况下在 flutter 中显示推送通知?

    在我的 flutter 应用程序中 我必须在没有 firebase 的情况下显示推送通知 我的服务器会在点击特定 API 后向我发送一条消息 并且我希望将该消息显示为推送通知 你能告诉我一种方法如何在颤振中做到这一点吗 您可以使用本地通知插
  • 直接使用从密钥库加载的 SecretKey 时,密钥用户未经过身份验证

    我正在尝试使用 Cipher 和在 KeyStore 中加载的 SecretKey 来加密数据 但总是收到此错误 导致 android security KeyStoreException 关键用户未经过身份验证 我尝试自己创建 Secre
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议

随机推荐

  • 通过 PHP 解析 JavaScript 文件

    我有一个 JavaScript 文件 我想在其中包含一些 php 代码 问题是我在 PHP 上有一些定义 我也想在 JS 上使用它们 有没有办法在 HTML 中包含 js 文件 允许服务器首先使用 php 解释它 在下载到客户端之前 谢谢
  • Numpy 中的结构化数组没有二元运算符吗?

    好的 在学习完 numpy 结构化数组的教程后 我可以创建一些简单的示例 from numpy import array ones names scalar 1d array 2d array formats float64 3 float
  • 我可以将 TLS 与 Send-MailMessage cmdlet 结合使用吗?

    我正在尝试使用 PowerShell 发送电子邮件 但需要使用 TLS 我可以使用 Send MailMessage cmdlet 执行此操作吗 这是我的代码 file c Mail content txt if test path fil
  • 仅从数据库中类似日志的表中读取新行

    我们遇到这样的情况 多台服务器将行块插入关系数据库的表中 而一台服务器偶尔从表中读取新数据 该表在概念上是某种日志文件 数据仅插入但从未修改 读取服务器显示日志的尾部 有没有办法让读取服务器只读取新数据 我们可以按照自己的意愿自由地构建表格
  • Parallel.For 和 Parallel.For 之间有区别吗?

    之间有区别吗TParallel For and TParallel For 两者都可以在 Delphi 10 Seattle 中编译 那么我应该坚持哪一个呢 方法定义为TParallel For需要 符号来转义 areserved word
  • 为什么 gcloud 命令启动缓慢?

    只是打字gcloud如需帮助请花 5 秒钟 gcloud gcloud 0 30s user 0 13s system 7 cpu 5 508 total gcloud version Google Cloud SDK 128 0 0 al
  • 在运行时从不同的文件加载 Properties.Settings

    有没有办法从默认文件以外的其他文件加载设置App config运行时文件 我想在加载默认配置文件后执行此操作 我用Settings SettingsVisual Studio 中的 GUI 来创建我的App config为我归档 配置文件最
  • 带边框/轮廓的六边形形状

    我知道可以使用以下代码创建六边形形状 hex before content width 0 height 0 border bottom 30px solid 6C6 border left 52px solid transparent b
  • 在同一个 apache 服务器上运行 django 和 Flask

    我正在尝试在同一个 apache 服务器上运行 django 和 Flask WSGISocketPrefix var www wsgi
  • 字符串变量可以设置多少个字符?

    我有一个字符串类型的变量 例如string test 我可以设置多少个字符进行测试 谢谢 所有引用类型 如字符串 实例的最大大小是有限的 由 CLR 改为 2GB 由于 NET 中的一个字符占用 2 个字节 这意味着一个字符串最多可以容纳大
  • StreamProvider 不更新状态

    我正在尝试使用StreamProvider from this很棒的包 但我一直在努力让特定的流正常工作 我创建一个StreamController我用它来添加数据Stream通过其Sink 所有这一切似乎都运作良好 但是当使用这个Stre
  • 允许 PHP 会话延续到子域

    我对所有用户数据以及当用户访问其个人资料时使用 PHP 会话 不是 cookie 除了会话 id cookie user mydomain example他们会立即 注销 直到删除子域 有没有办法接受来自所有域的会话 只要它 mydomai
  • Internet Explorer 中的 标记

    既没有标签也不text decoration blink Internet Explorer 支持 css 中的样式 有什么技术可以在 IE 中制作闪烁文本吗 如果可能的话 避免眨眼 这会惹恼别人 但你可以用 JS jQuery 来做到这一
  • ASP.NET Identity 2 支持匿名用户吗?

    我想允许匿名 尚未注册和注册的用户在我的网站上发帖 Posts table Id int Subject nvarchar Body nvarchar UserId uniqueidentifier 该项目使用最新的 MS 技术 ASP N
  • 将 GVim 配色方案更改为类似于命令行 Vim

    是否可以使 GVim 的配色方案与命令行版本 Vim 中的配色方案完全匹配 与白色背景的 GVim 相比 我更喜欢 Vim 的颜色 但我仍然想使用 GVim 因为 Shift 键在命令行版本上映射得不太好 是的 可以使 gvim 与终端 V
  • 感人片段

    任何人都可以建议我为此的算法 您将获得 x 轴上 N 个线段的起点和终点 这些片段中有多少可以被恰好两条垂直于它们的线接触到 即使是在它们的边缘 输入示例 3 5 2 3 1 3 1 5 3 4 4 5 5 1 2 1 3 2 3 1 4
  • 我可以指定 WPF DataGrid 中哪些列是可编辑的吗?

    我有一个带有自动生成列的 WPF 4 0 DataGrid 我只想允许用户编辑第一列 有一个简单的方法可以做到这一点吗 我试图添加 DataGridCell 样式并根据 ColumnName 第一列始终具有相同的名称 或 ColumnInd
  • 强制 IE7 进入标准渲染模式(不是怪癖)

    由于 IE7 在怪异模式下渲染 我在 IE7 中遇到显示问题 我通过显示 document compatMode 并返回 BackCompat 而不是 CSS1Compat 来确认这一点 使用 IE8 并恢复到 IE7 是可行的 因为这样可
  • 如何在 Springfox 中更改 Swagger UI index.html 徽标和标题内容?

    我正在记录使用 Spring Boot 2 4 3 创建的 APIspringfox swagger3 0 0 所以我现在有以下页面 我的客户想要将 Swagger UI 徽标更改为他们自己的 我做不到 我搜索并找到了一些解决方案 但它不起
  • 仅当应用程序未运行时显示推送通知 android

    在我的应用程序中 我集成了推送通知GCM 每当通知出现时它就工作正常 但即使用户位于应用程序内部 也会出现推送通知 我希望仅当用户位于应用程序外部时才显示通知 这是我的推送通知代码 Gcm广播接收器 public class GcmBroa