【问题标题】:How to check specific features through code?如何通过代码检查特定功能?
【发布时间】:2013-08-31 08:46:15
【问题描述】:

这是我的 Android 应用程序清单文件中指定的 <uses-feature><uses-permission>

<uses-feature
        android:name="android.hardware.telephony"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.location"
        android:required="false" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

我知道它用于指定应用程序所需的硬件/软件功能。此外,此标签过滤了我们在 Google Play 中的应用程序。我的应用程序也没有显示在某些设备上,包括平板电脑。我有一些疑问。

  1. 如果我们指定&lt;uses-permission&gt;而不使用&lt;uses-feature&gt;会发生什么吗?例如:使用权限CALL_PHONE,MODIFY_PHONE_STATE等...而不指定硬件功能android.hardware.telephony

  2. 单击两个按钮时,我的应用程序触发了以下接收器。 如何从代码中检查这些功能?

    android:name="android.intent.action.NEW_OUTGOING_CALL" 动作 android:name="android.intent.action.PHONE_STATE"

提前致谢

【问题讨论】:

标签: android uses-feature


【解决方案1】:

(1) 您需要同时定义&lt;uses-permission /&gt;&lt;uses-feature /&gt;,然后为该功能设置android:required="false"。比如

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-feature android:name="android.hardware.wifi" android:required="false" />

在这种情况下,您可以获得权限,但该功能不是必需的,您可以检查它是否在您的代码中可用。为此

(2) 你应该使用PackageManager.hasSystemFeature() 方法。比如

    PackageManager mgr = context.getPackageManager();
    boolean hasTelephony = mgr.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);

【讨论】:

  • 当我为这些功能设置 required="false" 并且没有从代码中检查它时会发生什么?如果未找到该功能,此代码是否会崩溃?
  • 视情况而定。如果设备上缺少相应的管理器或实现,它将崩溃。如果你只有一个 BroadcastReceiver,那么它不会被通知,但它也不会崩溃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
  • 2014-09-09
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
相关资源
最近更新 更多