Как указать требования к оборудованию через код?
У меня есть приложение для 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;
}