如果您不通过市场分发您的应用程序,并且您不关心遵循推荐的做法,那么您应该只需要<uses-permission>
应用程序使用的任何权限的标签。但是,为了允许正确的设备通过市场访问应用程序,您将需要<uses-permission>
and <uses-feature>
tags.
<uses-permission>
是授予您的应用程序采取某种操作的权限的请求。当准备安装您的应用程序时,用户可以查看请求的权限并决定是否继续安装。例如,如果应用程序尝试在未声明“android.permission.CALL_PHONE”权限的情况下拨打电话,则该尝试将失败。看here http://developer.android.com/reference/android/Manifest.permission.html获取基础平台权限列表。
<uses-permission>
市场也使用它来满足隐含的功能需求。如果您的应用程序使用需要电话硬件的权限,则市场将假定需要电话硬件,并且该应用程序将无法用于缺乏电话硬件的设备。
<uses-feature>
可用于通知市场某个功能是必须的或者该功能是可取的但不是必需的。该标签将覆盖任何隐含的功能<uses-permission>
。例如,如果您指定<uses-feature android:name="android.hardware.telephony" android:required="false" />
,那么电话是not必需的,无论请求什么权限。
看看如何<uses-permission>
and <uses-feature>
交互以创建市场过滤器,请参阅here http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions.
要在运行时检查某个功能是否可用,您似乎可以使用PackageManager.hasSystemFeature() http://developer.android.com/reference/android/content/pm/PackageManager.html#hasSystemFeature%28java.lang.String%29:
Context context; // Some object, such as Activity, that extends Context
// ...
boolean hasTelephony = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
if (hasTelephony) {
// ...
}
else {
// ...
}