我想在我的 Android 应用程序中实现一个功能,当我的应用程序支持他们的国家/地区时,该功能允许用户收到通知,但我对如何实现此功能有一些疑问。
用例场景如下所示:
用户转到 Activity ,他可以在其中看到支持的国家/地区列表。用户所在的国家/地区始终排在第一位,如果不支持,则有一个按钮,用户可以单击该按钮并请求在他的国家/地区获得支持时得到通知。
一些想法:
1. 当用户点击按钮时,我将通过 registerReceiver() 方法注册网络状态改变的广播接收器。在已注册的接收器中,我将始终检查用户是否使用 WiFi,如果是,则从服务器下载一些字节以检查现在是否支持用户所在的国家/地区。当获得支持时,我将注销接收器。我对这个想法的疑问是,以编程方式注册的广播接收器将直播多长时间?也许接受者需要再活几个月。如果用户不卸载我的应用程序,是否会一直接收事件?
2. 在 Android Manifest 中注册广播接收器,当用户请求通知时,将 bool 值 shouldBeInformed 放入 SharedPreferences 并始终在广播接收器中继续之前检查此值。
你有什么想法可以优雅高效地处理这个问题吗? C2DM 目前不是合适的解决方案。
谢谢。
最佳答案
I want to implement feature in my Android application which will allow user to receive notification when their country is supported in my application and I have some doubts how to implement this feature.
通常,“在我的应用程序中受支持”意味着对该应用程序进行了更新。
User's country is always first and if it's not supported there is a button where he can click and request to be informed when his country become supported.
在 SharedPreferences 中保存国家。在每次更新应用程序后首次启动时,查看该国家/地区是否在支持列表中,然后弹出“嘿!现在支持!”对话。或者,在紧要关头,注册 ACTION_PACKAGE_REPLACED,如果是您的包裹被替换了,请查看您是否支持该国家/地区并在状态栏中放置一个Notification。
When user click on a button I'll register network state changed broadcast receiver via registerReceiver() method.
为什么?
In registered receiver I'll always check if user is on WiFi and if it is, download some bytes from server to check if user's country is now supported.
为此您不需要BroadcastReceiver。每当您决定检查更新时(例如,每天一次通过 AlarmManager),您可以检查设备是否在 WiFi 上。我不太确定您为什么关心 WiFi,我不知道这与更新您的应用程序(通常由 Android Market 处理)有什么关系。
And when became supported I'll unregister the receiver.
它将在很久以前取消注册。
My doubt in this idea is how long will programmatically registered broadcast receiver live? Maybe receiver will need to live for months.
无论用户在屏幕上进行 Activity 多长时间,它都会存在。在您的 Activity 暂停之前,您需要注销接收器。即使您在 Activity 被销毁后故意泄漏接收器(这是一个坏主意),它也会存在几分钟,直到 Android 终止该进程。
Register broadcast receiver in Android Manifest and when user request to be informed put boolean shouldBeInformed in SharedPreferences and always check this value before proceeding in broadcast receiver.
为什么?
关于android - 以编程方式注册的广播接收器将直播多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7302972/
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_
question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我有一个非常简单的RubyRack服务器,例如:app=Proc.newdo|env|req=Rack::Request.new(env).paramspreq.inspect[200,{'Content-Type'=>'text/plain'},['Somebody']]endRack::Handler::Thin.run(app,:Port=>4001,:threaded=>true)每当我使用JSON对象向服务器发送POSTHTTP请求时:{"session":{"accountId":String,"callId":String,"from":Object,"headers":
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路