【问题标题】:Android permission only for certain casesAndroid 权限仅适用于某些情况
【发布时间】:2012-08-10 13:48:48
【问题描述】:

我只想在我的应用中为来自某个国家/地区的用户使用地理定位,以便找出该国家/地区(设备上的语言没有该国家/地区)。

我的应用不会将地理定位用于其他任何事情,我不想打扰其他用户/世界请求地理定位许可。

有没有办法解决这个问题?我唯一能想到的就是跳过请求权限并将访问地理位置的代码放在 try-catch 块中,但这显然在很多情况下不会获得地理位置(尽管我对此有一个后备策略)。

有一个后备策略,如果我没有得到地理位置,应用程序不会停止工作。不过能搞定就好了,不打扰其他国家有地理定位权限的用户也很好。

有什么建议吗?谢谢。

【问题讨论】:

  • 据我所知,您可以为整个应用程序选择权限。但是您可以创建两个应用程序。但是你不能使用multiple apk suppport
  • 是的,我不能使用多个 apk 支持,因为这是特定于国家/地区的,似乎不受支持。

标签: android permissions geolocation usability


【解决方案1】:

我认为您最好制作两个版本的应用程序,然后使用 Google Play 发布者的控制台将一个版本提供给您关注的特定国家/地区,另一个提供给其他所有人。在这种情况下,我会继续,让它成为两个不同的应用程序、两个不同的包名称等。

【讨论】:

  • 嗯...好吧,但这让我想到了其他问题。 google play 如何知道用户在哪里,以便显示正确的版本?
  • 这与一个想法有关,如果用户在下载应用程序时恰好在这个国家,他永远不会摆脱这个国家特定的设置,除非他删除并重新安装(其他)应用程序,这也不好......
  • Google Play 商店中大部分重要的地理定位逻辑都是基于服务器的,它可以访问许多移动设备可能无法使用的额外资源。
  • 嗯,是的,您需要一个 Google 帐户才能使用 Google Play,因此有很多可用信息。
  • 哦,抱歉...我假设您遇到了监管/分发问题,我希望在安装时比运行时更相关。
【解决方案2】:

这可以工作。

假设 - 访问 IPAddresstoLocation API

使用以下代码获取设备的IP地址

public String getLocalIpAddress()
  {
          try {
              for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
                  NetworkInterface intf = en.nextElement();
                  for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                      InetAddress inetAddress = enumIpAddr.nextElement();
                      if (!inetAddress.isLoopbackAddress()) {
                          return inetAddress.getHostAddress().toString();
                      }
                  }
              }
          } catch (Exception ex) {
              Log.e("IP Address", ex.toString());
          }
          return null;
      }

如果您有权访问任何返回位置的 API,则使用 IP 地址,您的问题应该得到解决。

【讨论】:

  • 但这也需要权限——android.permission.ACCESS_WIFI_STATE 对吧?
猜你喜欢
  • 2012-04-22
  • 2015-01-13
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多