Android:禁用平板电脑应用程序

27

我开发了一个应用程序,现在我想将应用程序限制为平板电脑。

这意味着该应用程序不应在任何平板电脑上运行。为此,我在Androidmenifest.XML文件中指定了支持屏幕:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.abc.xyz"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="5"
    android:targetSdkVersion="17"
    android:maxSdkVersion="17" />

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

<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<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"/>

<application
    android:icon="@drawable/appicon"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Black.NoTitleBar"
    android:allowBackup="true" >

    <activity
        android:name="com.abc.xyz.activities.hello"
        android:label="@string/title_activity_hello" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>        
</application>

</manifest>

现在问题是:

应用正在平板电脑上运行

 android:largeScreens="false"
 android:xlargeScreens="false"

在上面声明后。

现在我该做什么?请给我建议和指导。


你是如何测试它的???通过上传到Play商店吗?? - Akram
请查看此链接,它可能会对您有所帮助:http://developer.android.com/guide/topics/manifest/supports-screens-element.html - arshu
1
Akram:是的,我测试过了。它在选项卡中是可见的。我是从选项卡中进行测试的。 - Manoj Fegde
4个回答

38

这样可以防止在平板电脑上的访问,但允许新的像素密度桶(xxhdpixxxhdpi),并避免针对较低SDK编译的项目出现错误。它应该是AndroidManifest.xml<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" />
    <screen android:screenSize="small" android:screenDensity="480" />
    <screen android:screenSize="small" android:screenDensity="640" />

    <!-- 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" />
    <screen android:screenSize="normal" android:screenDensity="480" />
    <screen android:screenSize="normal" android:screenDensity="560" />
    <screen android:screenSize="normal" android:screenDensity="640" />
</compatible-screens>

更新于 2016 年 8 月 8 日 如果您想支持像 Nexus 5X 一样具有 420 密度的设备,请添加此行。

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

1
我之前缺少各种设备,现在问题解决了!谢谢! - Kevin van Mierlo
1
使用这个配置,像Nexus 5x(~423 ppi)这样的设备没有被包括在内。已经测试过了。你仍然需要添加xxhdpi。 - loshkin
1
什么是 <screen android:screenSize="normal" android:screenDensity="480" /> <screen android:screenSize="normal" android:screenDensity="560" /> <screen android:screenSize="normal" android:screenDensity="640" /> 的含义? - Rohan Patel
1
我认为这将与API文档一致。screenDensity属性声明dpi,这些都是文档中有效的dpi值。 - tsalaroth
4
我认为这个答案不再正确。我无法在三星Galaxy S9+上安装应用程序。 - kostik
显示剩余2条评论

19

请在你的清单文件中包含以下内容:

<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" />
    <screen android:screenSize="small" android:screenDensity="xxhdpi" />
    <screen android:screenSize="small" android:screenDensity="xxxhdpi" />
    <!-- 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" />
    <screen android:screenSize="normal" android:screenDensity="xxhdpi" />
    <screen android:screenSize="normal" android:screenDensity="xxxhdpi" />
</compatible-screens>
</manifest>

这将对您有所帮助。


3
别忘了加入xxhdpi,它是在API 16中添加的。 - Eduard
@EduardK. 但大多数xxhdpi设备属于平板电脑,为什么要包括它呢? - Satyam
4
@Satyam 因为存在一些不是平板电脑的xxhdpi设备,比如Nexus 5。 - Eduard
1
@Satyam...而且显示技术不断改进,因此未来我们很可能会将更多的xxhdpi设备安装在中等屏幕桶中。 - Eduard
1
<!-- 所有普通尺寸屏幕 --> <screen android:screenSize="small" android:screenDensity="xhdpi" /> <screen android:screenSize="small" android:screenDensity="xxhdpi" /> <screen android:screenSize="small" android:screenDensity="xxxhdpi" /> 这个值在重复。这样做是正确的吗?我们是否应该将这3个选项中的“small”替换为“Normal”? - Yog Guru

14

如果您想将应用程序限制在手机上使用,请在清单文件中使用<compatible-screens>标签。例如:

<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>

欲了解更多信息,请查看声明应用仅适用于手机

如果想要限制应用不在平板电脑上运行,就不应该使用<supports-screens>标签。这在官方文档中已经明确说明。

注意:如果您对相反情况(即您的应用不兼容较大屏幕)使用<supports-screens>元素,并将较大的屏幕大小属性设置为“false”,则外部服务(如Google Play)不会应用筛选。 您的应用程序仍然可用于较大的屏幕,但运行时不会调整大小以适应屏幕。 而是系统将模拟手机屏幕大小(大约320dp x 480dp;有关更多信息,请参见屏幕兼容性模式)。 如果要防止应用在较大屏幕上下载,请使用前面关于声明应用仅适用于手机的部分中提到的<compatible-screens>


1
请检查是否已经为layout-large和layout-xlarge创建了布局。如果存在,您的应用程序将在平板电脑上运行,请删除该布局文件夹(如果存在)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接