Как указать требования к оборудованию через код?

У меня есть приложение для 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> требования к оборудованию. Нет, я хочу удалить требуемые аппаратные функции для телефонных звонков из манифеста и проверить их из кода.

Некоторые планшеты, которые не поддерживают функцию телефонного звонка, не отображают мое приложение. Поэтому я хочу сделать свое приложение доступным для этих планшетов, для которых не хватает необходимого оборудования. Как я могу этого добиться?

Заранее спасибо

3 ответа

Решение

Некоторые разрешения автоматически накладывают требования к функциям.

Вот что говорится в руководствах API: "Для любого из приведенных ниже разрешений можно отключить фильтрацию на основе подразумеваемой функции, явно объявив подразумеваемую функцию в элементе с атрибутом android:required="false"."

Ваши разрешения подразумевают функции android.hardware.wifi, android.hardware.location.network, android.hardware.location.gps, android.hardware.location а также android.hardware.telephony,

Вы устанавливаете только два из них android:required="false", Таким образом, вы можете попытаться установить другие разрешения не требуется, тоже.

К сожалению, нет способа добавить разрешения после установки приложения. Возможно, вы можете выпустить 2 APK. Один для мобильных устройств и один для планшетов.

Попробуйте этот код, чтобы проверить, доступны ли функции телефона:

    public static boolean isTablet(Context context) {
        TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
        return manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE;
}
Другие вопросы по тегам