目前,我正在将以前使用 jar 库的 Google 服务迁移到 Google Play 服务。
但是,在迁移指南中,Google 没有提及我们应该为没有 Google Play 服务或没有最新的 Google Play 服务的设备做什么。
那么,我们是应该忽略没有 Google Play 服务的用户,还是有后备计划?
必须为回退计划维护单独的 jar 文件集和遗留代码是非常麻烦的。此外,可能存在冲突问题,将 jar 文件和 GPS 并排放置。 Utilize both Play Services and AdMob SDK
最佳答案
记录在案here您应该始终确保:
大多数情况下,您会在 onResume() 方法中执行这些检查。 GooglePlayServiceUtils 有一个名为 isGooglePlayServicesAvailable(...) 的方法,用于检查 Google Play 服务是否已安装以及它们的版本是否正确。它返回一个 int 错误代码,大致告诉您出了什么问题:
@Override
public void onResume() {
super.onResume();
int errorCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity());
switch(errorCode) {
case ConnectionResult.SUCCESS:
// Google Play Services installed and up to date
break;
case ConnectionResult.SERVICE_MISSING:
// Google Play services is missing on this device.
break;
case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED:
// The installed version of Google Play services is out of date.
break;
case ConnectionResult.SERVICE_DISABLED:
// The installed version of Google Play services has been disabled on this device.
break;
case ConnectionResult.SERVICE_INVALID:
// The version of the Google Play services installed on this device is not authentic.
break;
case ConnectionResult.DATE_INVALID:
// The device date is likely set incorrectly.
break;
}
}
您可以使用 GooglePlayServiceUtils 的 showErrorDialogFragment(...) 之类的方法来显示适当的错误消息:
int errorCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity());
if(GooglePlayServiceUtil.showErrorDialogFragment(errorCode, getActivity(), REQUEST_CODE)) {
// Dialog was shown
} else {
// Dialog was not shown.
}
只有当错误代码不是ConnectionResult.SUCCESS 时才会显示该对话框。
您可以找到 GooglePlayServiceUtil 类的文档 here .
您是否需要回退完全取决于您的应用和您的目标市场。例如,如果您将它发布到 Google Play 商店——我假设您这样做是因为您使用了 Google Play 服务——那么您实际上并不需要后备。因为要让人们下载您的应用程序,他们首先需要 Google Play 商店,如果他们拥有 Google Play 商店,那么他们就可以访问 Google Play 服务。如果您想为亚马逊设备或诺基亚商店发布它,那当然是完全不同的故事,因为拥有这些设备的设备没有 Google Play 商店或 Google Play 服务。同样在中国这样的市场,几乎没有任何 Android 设备带有 Google Play 商店或任何 Google 服务,所以基本上你必须决定你的应用程序是否有必要,但正如我所说,如果你将它发布到 Google Play 商店,我会不用担心。检查以及我上面提到的错误对话框应该足以确保您的应用程序正常运行。新版本的 Google Play Services APK 的推出通常很快。这可能需要几天时间,但之后大多数设备都会收到更新。您还必须考虑一件事:如果您开发的应用程序需要当前 Google Play 服务的功能,那么您很可能不会遇到任何问题,因为几乎所有设备都已经拥有当前版本,这将是相当困难的找到不是最新的设备。当您快速推出使用几天前推出的一些新功能的应用程序更新时,您必须小心。在那种情况下,您可能会遇到更多问题。
但最后您必须记住,这完全取决于您发布应用的国家/地区以及您要针对哪个生态系统发布应用。
希望我能回答您的问题,如果您还有任何问题,请随时提出!
关于android - 没有 Google Play 服务的设备的回退计划是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23676485/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用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
我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput