2

我有一个 android 应用程序,它可以控制呼叫,即允许或阻止特定的来电和去电。这是清单文件的一部分。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xxxx.xxxxxx.xxxxxxx"
    android:installLocation="internalOnly"
    android:versionCode="1"
    android:versionName="1.0" >
     <uses-feature
        android:name="android.hardware.telephony"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.location"
        android:required="false" />
    <supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true"
        android:xlargeScreens="true" />
    <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" />
     <application>
        </activities>
        </services>
        <receiver android:name="xxxx.xxxx.ReceiverOutGoingCall" >
            <intent-filter>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            </intent-filter>
        </receiver>
        <receiver android:name="xxxx.xxxx.ReceiverIncomingCall" >
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

此应用程序在 Google play 中的某些设备上没有显示。经过长时间的搜索,我了解到这是由于<uses-feature>硬件要求。不,我想从清单中删除电话所需的硬件功能并从代码中检查它们。

一些没有电话功能的平板电脑不显示我的应用程序。所以我想让我的应用程序可用于这些缺乏所需硬件的平板电脑。我该如何实现?

提前致谢

4

3 回答 3

2

某些权限会自动暗示功能要求。

这就是 API 指南所说的: “对于以下任何权限,您可以通过在元素中显式声明隐含功能并使用 android:required="false" 属性来禁用基于隐含功能的过滤。”

您的权限意味着功能android.hardware.wifiandroid.hardware.location.networkandroid.hardware.location.gps和。android.hardware.locationandroid.hardware.telephony

您只将其中两个设置为android:required="false". 因此,您也可以尝试将其他权限设置为不需要。

于 2013-08-28T09:26:51.553 回答
1

不幸的是,安装应用程序后无法添加权限。也许您可以发布 2 个 APK。一种用于移动设备,一种用于平板电脑。

于 2013-08-28T08:31:55.483 回答
0

试试这个代码来检查电话功能是否可用:

    public static boolean isTablet(Context context) {
        TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
        return manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE;
}
于 2013-08-28T08:30:36.847 回答