59

Android タブレットと Android フォン用の 2 つのアプリがあります。タブレットアプリの場合、設定しandroid:minSdkVersion="11"ました。しかし、最近では、Galaxy S3 のような Android フォンには Android バージョン 4.0.4 が搭載されているため、S3 ユーザーは Google Play ストアから私のタブレット アプリをダウンロードできます。電話ユーザーがタブレット アプリをインストールするときに、電話アプリをダウンロードするように警告したいと思います。逆に、タブレット ユーザーは電話アプリを実行するときにタブレット アプリをダウンロードします。

デバイスの種類を簡単に検出する方法はありますか?

編集:

このリンクで解決策を見つけました。

マニフェスト ファイルで、携帯電話とタブレットの画面機能を宣言すると、Google Play が携帯電話とタブレットの両方のダウンロード許可を決定します。

4

8 に答える 8

133

これを使って:

public static boolean isTablet(Context context) {
    return (context.getResources().getConfiguration().screenLayout
            & Configuration.SCREENLAYOUT_SIZE_MASK)
            >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}

デバイスが大画面で動作している場合は true を返します。

その他の便利な方法については、こちらを参照してください

于 2012-07-04T14:22:57.847 に答える
26

この
Add boolean parameter in resource file を試すこともできます。
res/values/dimen.xml ファイルにこの行を追加します

<bool name="isTab">false</bool>

res/values-sw600dp/dimen.xml ファイルに次の行を追加します。

<bool name="isTab">true</bool>

次に、Java ファイルで次の値を取得します。

if(getResources().getBoolean(R.bool.isTab)) {
    System.out.println("tablet");
} else {
    System.out.println("mobile");
}
于 2015-12-14T07:27:39.177 に答える
1

何かが電話をかけることができるかどうかを検出する必要があると思います。それ以外はすべて、電話機能のないタブレット/テレビになります。

私が見た限り、これは画面サイズに依存しない唯一のものです。

public static boolean isTelephone(){
    //pseudocode, don't have the copy and paste here right know and can't remember every line
    return new Intent(ACTION_DIAL).resolveActivity() != null;
}
于 2016-09-14T15:05:06.753 に答える
0

Google Play ストア機能を使用して、タブレット アプリをタブレットに、電話アプリを電話にダウンロードすることのみを有効にします。

ユーザーが間違ったアプリをインストールした場合は、別の方法でインストールしたに違いありません。

于 2012-07-04T14:22:48.773 に答える
0

次のコードを使用して、デバイスの種類を識別します。

private boolean isTabletDevice() {
     if (android.os.Build.VERSION.SDK_INT >= 11) { // honeycomb
         // test screen size, use reflection because isLayoutSizeAtLeast is only available since 11
         Configuration con = getResources().getConfiguration();
         try {
              Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast");
              Boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE
              return r;
         } catch (Exception x) {
              return false;
         }
      }
    return false;
}
于 2014-08-19T04:31:59.873 に答える
0

デバイスの種類 (タブ/電話) に基づいて切り替える必要があるアプリにも同様の問題がありました。IOS は完全にデバイス タイプを提供してくれましたが、同じアイデアが Android では機能しませんでした。解像度/ DPI メソッドは、小さな解像度のタブ、高解像度の電話で失敗しました。たくさんの髪の毛を引き裂き、頭を壁にぶつけた後、私たちは奇妙なアイデアを試しましたが、解像度に依存しない非常にうまく機能しました. これもあなたを助けるはずです。

Main クラスでこれを記述すると、TAB の場合は null として、Phone の場合は mobile としてデバイス タイプを取得する必要があります。

String ua=new WebView(this).getSettings().getUserAgentString();


if(ua.contains("Mobile")){
   //Your code for Mobile
}else{
   //Your code for TAB            
}
于 2014-06-03T13:30:07.277 に答える