以下是我的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中过滤我们的应用程序。我的应用程序也没有显示某些设备,包括平板电脑。我有些疑惑。
如果我们在不使用<uses-permission>
的情况下指定<uses-feature>
,是否会发生任何事情?例如:使用权限CALL_PHONE,MODIFY_PHONE_STATE
等...而不指定硬件功能android.hardware.telephony
< / p>
单击两个按钮时,我的应用程序触发了以下接收器。 如何从代码中检查这些功能?
机器人:名称=&#34; android.intent.action.NEW_OUTGOING_CALL&#34; 动作android:name =&#34; android.intent.action.PHONE_STATE&#34;
先谢谢
答案 0 :(得分:8)
(1)您需要定义<uses-permission />
和<uses-feature />
,然后为该功能设置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);