【问题标题】:Android: Disable application for tabletAndroid:禁用平板电脑的应用程序
【发布时间】:2013-08-14 10:42:32
【问题描述】:

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

表示应用程序不应在任何平板电脑上运行。为此,我将 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 商店??
  • 请查看此链接,它可能对您有所帮助:developer.android.com/guide/topics/manifest/…
  • Akram :是的,我测试过。它对选项卡可见。我从标签测试。

标签: android android-manifest android-screen-support android-screen


【解决方案1】:

这会阻止平板电脑上的访问,但允许使用新的密度桶(xxhdpixxxhdpi)并避免针对较低 SDK 编译的项目出现错误。它应该是 AndroidManifest.xml

&lt;manifest&gt; 元素的直接子元素
<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>

8.8.2016 更新 如果您想支持 420 密度的类似 Nexus-5x 的设备,请添加此行

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

【讨论】:

  • 我错过了各种设备,这个解决了!谢谢!
  • 使用此配置,不包括 Nexus 5x(~423 ppi) 等设备。经测试。您仍然需要添加 xxhdpi。
  • 什么是
  • 我相信它会根据API docs。 screenDensity 属性声明了 dpi,所有这些都是文档中的有效 dpi 值。
  • 我认为不再是正确答案了。我无法在三星 Galaxy S9+ 上安装应用程序
【解决方案2】:

在您的清单中包含以下内容:

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

这会对你有所帮助。

【讨论】:

  • 不要忘记添加 xxhdpi,它是在 API 16 中添加的
  • @EduardK。但大多数 xxhdpi 设备属于 Tabs。那为什么要包括那个呢?
  • @Satyam 因为有 xxhdpi 设备不是平板电脑,例如 Nexus 5。
  • @Satyam ...而且显示技术只是在改进,所以未来我们可能会在中型屏幕桶中安装越来越多的 xxhdpi 设备。
  • 这个值是重复的。这是正确的吗 ?对于这3个选项,我们将“小”替换为“普通”是否正确?
【解决方案3】:

如果您想将应用程序限制在手机上,请仅在清单中使用&lt;compatible-screens&gt; 标签。也就是这样

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

更多信息请查看Declaring an App is Only for Handsets

如果您想限制平板电脑上的应用,则不应使用&lt;supports-screens&gt; 标签。 official doc中明确提到了

注意:如果您使用相反的元素 场景(当您的应用程序与大屏幕不兼容时) 并将较大的屏幕尺寸属性设置为“false”,然后设置为外部 Google Play 等服务不应用过滤。你的申请 仍可用于更大的屏幕,但当它运行时,它将 不调整大小以适应屏幕。相反,系统将模拟 手机屏幕尺寸(约 320dp x 480dp;请参阅屏幕兼容性 模式了解更多信息)。如果您想阻止您的申请 从在更大的屏幕上下载,使用 , as 上一节中讨论过的关于声明一个应用程序仅适用于 手机。

【讨论】:

    【解决方案4】:

    请检查您是否为 layout-large、layout-xlarge 进行了布局。如果它们存在,您的应用将在平板电脑上运行,请删除该布局文件夹(如果存在)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 2023-03-03
      • 2013-03-10
      • 1970-01-01
      相关资源
      最近更新 更多