【问题标题】:Support phones and phablets, not tablets支持手机和平板手机,而不是平板电脑
【发布时间】:2018-05-10 12:54:05
【问题描述】:

我最近将我的应用上传到了仅支持手机和平板手机的 Play 商店。 所以我插入下面的代码只支持手机和平板手机,根据https://developer.android.com/guide/practices/screens-distribution.html

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="com.xxx.yyy.permission.C2D_MESSAGE" />

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

    <application android:name=".AppApplication" 
android:allowBackup="false" 
android:icon="@mipmap/ic_launcher" 
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round" 
android:supportsRtl="true" 
android:theme="@style/AppTheme" 
android:largeHeap="true"/>

当三星 S8 尝试安装时,奇怪的事情开始出现。它将具有三种可能性。 华为 Mate 9 也有类似情况。

  1. 能够找到应用并安装。
  2. 能够找到该应用,但显示错误“您的设备与此版本不兼容”。
  3. 根本找不到应用程序。

我的问题是,我该如何解决这个问题? Google Play 控制台说除了我上面提到的平板电脑外,所有设备都受支持。 还是与最近手机刚刚实现的 WQHD 相关?

编辑: 只有升级到最新固件才能支持WQHD的手机才会出现此问题。

【问题讨论】:

    标签: android android-manifest tablet


    【解决方案1】:

    您可以使用&lt;supports-screens&gt; 代替&lt;compatible-screens&gt;,因为它不需要您指定应用支持的每个屏幕密度。

    手机设备示例:

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

    来源:

    干杯。

    已编辑更新到 ANDROID OREO:

    根据您的评论“已编辑:该问题仅发生在升级到最新固件的用户身上,这使手机能够支持 WQHD。”

    可能的逻辑原因:问题是这些设备之前抑制了它们的真实屏幕(制造商/安卓操作系统)分辨率,因此代码在所有设备上都按预期工作。

    升级到释放设备真正屏幕分辨率功能的新 Android 操作系统 /Oreo 时出现问题。

    设置-显示-屏幕分辨率(有3个设置)

    建议的测试/验证是将分辨率设置为最低。尝试安装/运行应用程序。

    参考:https://www.androidcentral.com/understanding-galaxy-s8s-display-resolution-options

    这绝对超出了您的代码控制目前,因为它提供了对 Android API 8.0 Oreo 实用程序文档的全新升级,同时您可以解决包括 max解决这些设备或教育用户。

    【讨论】:

      【解决方案2】:

      除了@Khalid回答,使用&lt;support-screens&gt;会开启屏幕兼容模式,让平板用户可以下载。

      这是不可避免的,因为&lt;compatible-screens&gt; 无法区分允许用户动态设置分辨率(HD+、FHD+ 和 WQHD+)的较新版本的 Android(或三星),并且无法真正确定屏幕密度。

      为了解决这个问题,我在应用启动时添加了一个验证器来检查屏幕大小。

          public boolean checkUnsupportedSize() {
          int screenSize = this.getResources().getConfiguration().screenLayout &
                  Configuration.SCREENLAYOUT_SIZE_MASK;
      
          switch(screenSize) {
              case Configuration.SCREENLAYOUT_SIZE_SMALL:
                  return false;
              case Configuration.SCREENLAYOUT_SIZE_NORMAL:
                  return false;
              default:
                  return true;
          }
      }
      
          if (checkUnsupportedSize()) {
          YourActivity.this.finish();
      }
      

      由于手机和平板总是会使用 Small 和 Normal 的 Screen Size,我们可以区分其他的 Screen Size 并强制应用退出。

      在 Google Play 对手机、平板电脑和平板电脑进行适当过滤之前,这是我能想到的解决方法。

      干杯。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-06
        • 2013-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多