Android: каково правильное объявление манифеста для таргетинга только на смартфоны в Play Store

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

Я читал Google Поддержка нескольких экранов и совместимые-экраны. Я нашел поддерживаемые экраны, но атрибут android:largestWidthLimitDp доступен в «API13», и я начинаю с «API10».

Есть более новые устройства (Xperia Z, Galaxy S4 и HTC One), которые используют drawable-xxhdpi графику и имеют разрешение экрана, как у планшета.

Вопрос. Подходит ли этот манифест-декларация только для смартфонов, включая новые смартфоны?

 <compatible-screens>
    <!-- all small size screens -->
    <screen android:screenSize="small" android:screenDensity="ldpi" />
    <screen android:screenSize="small" android:screenDensity="mdpi" />
    <screen android:screenSize="small" android:screenDensity="hdpi" />
    <screen android:screenSize="small" android:screenDensity="xhdpi" />
    <!-- all normal size screens -->
    <screen android:screenSize="normal" android:screenDensity="ldpi" />
    <screen android:screenSize="normal" android:screenDensity="mdpi" />
    <screen android:screenSize="normal" android:screenDensity="hdpi" />
    <screen android:screenSize="normal" android:screenDensity="xhdpi" />

    <!-- all large size screens -->
    <screen android:screenSize="large" android:screenDensity="ldpi" />
    <screen android:screenSize="large" android:screenDensity="mdpi" />
    <screen android:screenSize="large" android:screenDensity="hdpi" />
    <screen android:screenSize="large" android:screenDensity="xhdpi" />

    <!-- support for Xperia Z, Galaxy S4 and HTC One -->
    <screen android:screenDensity="480" android:screenSize="normal" /> 
    <screen android:screenDensity="480" android:screenSize="large" /> 
</compatible-screens>

person longi    schedule 24.10.2013    source источник
comment
Согласно developer.android.com/guide/practices/ это способ сделать это. Он будет поддерживать малые, средние и большие экраны любой плотности, но не будет поддерживать очень большие экраны (планшеты).   -  person Bill Gary    schedule 24.10.2013
comment
обратите внимание, что makes calls и phone - это 2 набора объектов, довольно близких, но не идентичных. Некоторые нефоновые устройства могут совершать звонки.   -  person njzk2    schedule 24.10.2013


Ответы (4)


Если вашему приложению нужна возможность совершать телефонные звонки. Почему бы не фильтровать функцию телефонии?

<uses-feature android:name="android.hardware.telephony" android:required="true" />
person pocmo    schedule 24.10.2013
comment
Что произойдет, если у планшета есть LTE или он может звонить, как Asus Phonepad? - person JJ86; 24.10.2013
comment
app needs functionality to start calls, который SO почему-то интерпретировал как phone only. Я думаю, что любой планшет, который может совершать звонки, должен иметь возможность использовать приложение, которое должно совершать звонки. - person njzk2; 24.10.2013
comment
@pocmo: Спасибо за это! Можно ли ТОЛЬКО использовать вашу рекомендацию и вообще удалить «совместимые экраны»? (так, приложение для каждого устройства, которое может совершать звонки?!) - person longi; 24.10.2013

Согласно <uses-feature> http://developer.android.com/guide/topics/manifest/uses-feature-element.html, сам факт наличия разрешения CALL_PHONE (которое у вас есть, когда вы совершаете звонки) подразумевает требование android.hardware.telephony, которое эффективно отфильтровывает любые нетелефонные дееспособное устройство.

С другой стороны, ограничение по размеру/плотности экрана может исключить несуществующие устройства, требуя, чтобы вы время от времени обновляли свое приложение. Я бы не рекомендовал это.

person njzk2    schedule 24.10.2013

@pocmo прав, но вы также должны добавить

<supports-screens
    android:anyDensity="true"
    android:largeScreens="false"
    android:normalScreens="true"
    android:resizeable="false"
    android:smallScreens="false"
    android:xlargeScreens="false" />

в ваш файл манифеста. android:largeScreens="false" и xlargeScreens="false" удалят планшеты 7" и 10" из списка.

person Eddy    schedule 24.10.2013

Взгляните на эту официальную ссылку в разделе Объявление приложения только для телефонов:

<manifest ... >
    <compatible-screens>
        <!-- all small size screens -->
        <screen android:screenSize="small" android:screenDensity="ldpi" />
        <screen android:screenSize="small" android:screenDensity="mdpi" />
        <screen android:screenSize="small" android:screenDensity="hdpi" />
        <screen android:screenSize="small" android:screenDensity="xhdpi" />
        <!-- all normal size screens -->
        <screen android:screenSize="normal" android:screenDensity="ldpi" />
        <screen android:screenSize="normal" android:screenDensity="mdpi" />
        <screen android:screenSize="normal" android:screenDensity="hdpi" />
        <screen android:screenSize="normal" android:screenDensity="xhdpi" />
    </compatible-screens>
    ...
    <application ... >
        ...
    <application>
</manifest>

ИЗМЕНИТЬ

Попробуйте добавить:

<screen android:screenSize="normal" android:screenDensity="xxhdpi" />

or

<screen android:screenDensity="480" android:screenSize="normal" />
person JJ86    schedule 24.10.2013
comment
но это не выбирает никаких xxhdpi-устройств, не так ли? проверьте здесь: stackoverflow.com/questions/16500309/ - person longi; 24.10.2013
comment
@longilong попробуйте добавить ‹screen android:screenSize=normal android:screenDensity=xxhdpi /› или ‹screen android:screenDensity=480 android:screenSize=normal /› . - person JJ86; 24.10.2013