Android 的基于位置的推送通知

2023-11-22

有没有办法在不使用第三方推送通知服务(例如 Parse)的情况下为 Android 设备发送基于位置的推送通知?我想向我的用户发送推送通知,而不会因为收到与该特定用户无关的通知而烦恼,因为他们不在某个区域。另外,我可以根据时间间隔获取用户位置,但如果可能的话,我宁愿采用不同的方式。


是的,这是完全可能的,只要我正确解释你所问的内容。

为了实现这一点,您将向所有用户发送 GCM 推送通知(除非您有办法在服务器端过滤掉其中一些用户)。然后在您的应用程序中,您不只是创建通知并将其传递给通知管理器,而是首先使用 LocationManager(或较新的 LocationServices API)首先确定用户是否位于正确的位置,然后丢弃 GCM如果不是,请通知。

为此,您需要注意几件事:

  • 您的 AndroidManifest.xml 将需要进行多项权限更改,包括 GCM 更改和位置访问:

    <!-- Needed for processing notifications -->
    <permission android:name="com.myappname.permission.C2D_MESSAGE" android:protectionLevel="signature" />
    <uses-permission android:name="com.myappname.permission.C2D_MESSAGE" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    
    <!--  Needed for Location -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    
  • 您还需要在中设置一个通知接收器<application>清单部分:

    <receiver android:name="com.myappname.NotificationReceiver" android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="com.myappname" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="com.myappname" />
        </intent-filter>
    </receiver>
    
  • 此外,您还需要编写您的NotificationReceiver java 类,并覆盖onReceive功能:

    public class NotificationReceiver extends BroadcastReceiver {
        public void onReceive(final Context context, final Intent intent) {
    
            if ("com.google.android.c2dm.intent.REGISTRATION".equals(intent.getAction())) {
    
                handleRegistration(context, intent); // you'll have to write this function
    
            } else if ("com.google.android.c2dm.intent.RECEIVE".equals(intent.getAction())) {
    
                // the handle message function will need to check the user's current location using the location API you choose, and then create the proper Notification if necessary.
                handleMessage(context, intent);
    
            }
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 的基于位置的推送通知 的相关文章

随机推荐

  • MySQL 创建外键的语法

    创建外键时这种语法是否正确 create table department departmentID int not null auto increment primary key name varchar 30 type InnoDB c
  • .NET 中的单元测试 System.Threading.Timer

    如何在 NET中基于System Threading Timer对计时器进行单元测试 System Threading Timer有一个回调方法 您可以通过不实际创建直接依赖项来对其进行单元测试System Threading Timer
  • 使用WebService自动捕获所有未处理的异常

    我有一个 C WebService 应用程序 我想在其中捕获应用程序抛出的所有未处理的异常 我怎样才能做到这一点 由于某种原因 Web 服务不会触发 Application Error 事件 请参阅其他问题 杰夫 阿特伍德先生本人也发表了一
  • Waitress和GUnicorn大数据输入比Flask开发服务器慢很多

    问题描述 我正在尝试创建一个 Flask 应用程序 它应该 仅在本地主机上可见 因此不会降低网络速度 获取相当多的数据 30MB 作为一个大型 numpy 数组 作为输入 并输出相对较小的数据量 大约 1MB 我做了一个快速测试并使用 Fl
  • 如何在本机活动中显示软键盘

    当我尝试使用时ANativeActivity showSoftInput 它不会调出软键盘 我尝试过使用ANativeActivity showSoftInput engine gt app gt activity ANATIVEACTIV
  • 如何保留 EditText 中的换行符?

    当我显示以下内容时忽略新行 private void post String subject String message subject etSubject getText toString message etMessage getTe
  • 如何从插件中的单独 C++ 线程调用发射器回调?

    对于上下文 我从this问题 我需要在另一个线程中调用发射器的回调 我做了一个最小的例子 但它出现了段错误emit Call cb result 我的第一直觉是我对生命周期有疑问env or the emit功能 插件 cpp includ
  • jpa使用标准api延迟获取多个级别的实体

    我使用 JPA2 及其 Criteria API 从数据库中选择我的实体 该实现是 WebSphere Application Server 上的 OpenJPA 我的所有实体都是使用 Fetchtype Lazy 建模的 我从数据库中选择
  • android中访问wifi的安全异常

    请看下面的代码 wifi WifiManager getSystemService Context WIFI SERVICE if wifi isWifiEnabled false Toast makeText getApplication
  • 即使设置了包含路径,Eclipse 也找不到头文件

    这是我们已经处理了一段时间的问题 我们正在使用 Cygwin 工具链构建 C 项目 无论我们在 C 编译器中添加项目设置下的包含路径 Eclipse 似乎都找不到必要的头文件 到目前为止 我们已经完成了 Stackoverflow 社区建议
  • 启动器和发送活动的意图过滤器

    我试图让我的主要活动成为启动器活动并接收发送事件 不知怎的 我似乎无法让两者同时工作 例如 我的应用程序托盘中有启动器图标 但不在图库中的图像共享菜单中 我怎样才能让两者同时工作 使用此意图过滤器 图标位于应用程序托盘中 但不在共享菜单中
  • SQL 数据透视日期列?

    我对 SQL 相当陌生 但相信我 在发布此内容之前我已经搜索过帮助 我有一个查询 它返回分配给工作的人员列表 这些工作的长度也不同 分配给这些工作的人员的工作长度也不同 我想做的是转换类似记录的列表 唯一改变的变量是日期 以及如何旋转此数据
  • 如何在 .net 内存转储中列出正在运行的任务

    我们有一个使用异步 等待模式的复杂 ASP Net Core 应用程序 该应用程序最近停止响应 我们为其进行了内存转储 我们怀疑有一些异步操作导致应用程序卡住 但不确定是哪一个 在对 Web 应用程序进行内存转储后 我们可以看到很少有正在运
  • 我想用 python 抓取印地语(印度语言)pdf 文件

    我已经编写了Python代码 可以从PDF文件中抓取所有数据 这里的问题是 一旦被刮掉 单词就失去了语法 如何解决这些问题 我附上代码 from pdfminer pdfinterp import PDFResourceManager PD
  • asyncio 中的合作收益

    我正在 龙卷风 网络服务器上运行一个长时间的 CPU 密集型任务 我不想将此任务卸载到线程 目前 在这个长时间运行的任务中 如何正确地 yield 控制事件循环 以便网络请求仍然得到服务 注意 我在这里以合作调度的方式使用 yield 而不
  • AWS 中的负载均衡器、侦听器目标、目标组之间有什么区别?

    您好 我是 AWS 新手 试图了解负载均衡 目标 目标组和安全组之间的区别 我有 2 个实例正在运行 现在我想平衡这些服务器的负载 是否会在新实例上创建负载平衡 什么是侦听器以及它们与负载均衡器有何不同 是的 负载均衡器是一个 EC2 实例
  • 非常量大小的数组:为什么这有效? [复制]

    这个问题在这里已经有答案了 include
  • 可调整大小的 Vue-good-table 或 Vue

    我在 Vue js 中有一个使用 Vue good table 制作的表格 我需要找到一种方法来调整大小 像这样的东西 https codepen io validide pen aOKLNo 不幸的是 据我所知 Vue good tabl
  • 为什么wcftestclient中无法调用WCF?

    我建立了一个WCF服务 它在IE addr中运行良好 但是当我将其添加到wcftestclient并调用方法时 会提示错误并显示为 调用服务失败 可能原因 服务离线或无法访问 客户端配置与代理不匹配 现有代理无效 有关更多详细信息 请参阅堆
  • Android 的基于位置的推送通知

    有没有办法在不使用第三方推送通知服务 例如 Parse 的情况下为 Android 设备发送基于位置的推送通知 我想向我的用户发送推送通知 而不会因为收到与该特定用户无关的通知而烦恼 因为他们不在某个区域 另外 我可以根据时间间隔获取用户位