2016-07-05 1 views
0

Comment faites-vous un apk être une application de lancement sur les tablettes, mais juste une application normale sur les téléphones? Comment configurer le fichier manifeste pour cela?Android APK faire un était manifesté application de lancement sur tablette, mais l'application normale sur le téléphone

Par NAL Je veux dire, il sera affiché comme l'une des options lorsque l'apk est exécuté sur les tablettes: Select home picker

Si la même apk est exécuté sur les téléphones, il ne montrera pas « Sélectionner une maison app "sélecteur.

En termes simples, cela est le comportement du apk doit avoir:

Objectif:

  • Lorsque je clique maison sur téléphones, je ne vois pas l'application comme un des choix du lanceur .
  • Lorsque je clique chez moi sur tablette alors je devrais voir l'app comme l'un des choix.

Mon approche est que j'ai un ChooserActivity.java qui détermine quel type de périphérique est en cours d'exécution. Si c'est une tablette, elle démarrera TabletMainActivity.java, si c'est un téléphone, elle démarrera PhoneMainActivity.java. (Le code pour savoir si elle est un comprimé ou un téléphone est correct.)

ChooserActivity.java

public class ChooserActivity extends AppCompatActivity { 

    ImageView tabIndicator; 
    private static final String TAG = "Chooser"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_chooser); 
     Log.d(TAG, "onCreate2() Chooser"); 
     finish(); 

     if (findViewById(R.id.tabIndicator)==null){ 
      //PHONE 
      startActivity(new Intent(this, PhoneMainActivity.class)); 

     }else{ 
      //TABLET 
      startActivity(new Intent(this, TabletMainActivity.class)); 
     } 
    } 

} 

res/layout/activity_chooser.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.sample.tabletchecker.Chooser"> 
<TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:text="PHONE" 
    /> 

</RelativeLayout> 

res/layout- sw600dp/activity_chooser.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.sample.tabletchecker.Chooser"> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="TABLET" 
     /> 
    <ImageView 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:id="@+id/tabIndicator" 
     /> 
</RelativeLayout> 

TabletMainActivity.java a les paramètres manifestes de lancement suivants:

<activity android:name=".TabletMainActivity" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <!-- launcher setting --> 
      <category android:name="android.intent.category.HOME" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

PhoneMainActivity.java est juste une activité normale, n'a rien sur le manifeste. C'est fait exprès parce que je veux que cette activité soit une activité normale sur les téléphones.

<activity android:name=".PhoneActivity"> 

    </activity> 

Mon ChooserActivity.java est la première activité qui se met en marche lorsque l'application se cliqué/ouvert, il choisit alors entre le 2. ChooserActivity entrée manifeste

<activity android:name=".ChooserActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
</activity> 

J'ai essayé différentes variantes pour la intention-filter pour le TabletMainActivity.java mais jamais capable d'obtenir le comportement correct. Je vois toujours le sélecteur du lanceur montré.

+0

vous voulez dire, commencer Après la 'ChooserActivity' que vous appelez soit' 'TabletMainActivity' ou MobileMainActivity'? –

+0

Oui, ** ChooserActivtity.java ** détermine l'activité à démarrer puis se termine. S'il s'agit d'une tablette, ChooserActivity ouvre TabletMainActivity si le téléphone démarre ** PhoneMainActivity **. – Hilfritz

Répondre

0

Voir cette réponse ici

Determine if the device is a smartphone or tablet?

http://developer.android.com/training/multiscreen/screensizes.html#TaskUseSWQuali

Si vous lisez tout le sujet, ils expliquent comment définir une valeur booléenne dans un fichier de valeur spécifique (comme res/valeurs- sw600dp /):

<resources> 
    <bool name="isTablet">true</bool> 
</resources> 

Parce que le qualificatif sw600dp est seulement valide pour les plates-formes ci-dessus android 3.2. Si vous voulez vous assurer que cette technique fonctionne sur toutes les plateformes (avant 3.2), créer le même fichier dans res/dossier valeurs xlarge:

<resources> 
    <bool name="isTablet">true</bool> 
</resources> 

Ensuite, dans le fichier de valeurs « standard » (comme res/valeurs /), vous définissez le booléen false:

<resources> 
    <bool name="isTablet">false</bool> 
</resources> 

Puis, en vous l'activité, vous pouvez obtenir cette valeur et vérifiez si vous utilisez dans un dispositif de la taille de la tablette:

contrôle sur vous choisissez activité lorsque Intention

boolean tabletSize = getResources().getBoolean(R.bool.isTablet); 
if (tabletSize) { 


Intent intent = new Intent(ChooserActivity.this, TabletMainActivity.class); 


    startActivity(intent); 

} else { 
     Intent intent = new Intent(ChooserActivity.this, PhoneMainActivity.class); 


    startActivity(intent); 


} 

La méthode supérieure fonctionne pour moi une bonne

Je suis également mis un Autre méthode pour vous ...

importation

 import android.content.Context; 
    import android.content.res.Configuration; 
    import android.util.DisplayMetrics; 

Fonction

public static int FunctionCall(Context context) { 

    if ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) { 

      Intent intent=new Intent(this,PhoneMainActivity.class); 

      startActivity(intent); 
    } 

    else if ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) { 
     Intent intent=new Intent(this,PhoneMainActivity.class); 

       startActivity(intent); 

    } 
    else if ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) { 

     Intent intent=new Intent(this,TabletMainActivity.class); 

       startActivity(intent); 


    } else if ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE) { 
     Intent intent=new Intent(this,TabletMainActivity.class); 

       startActivity(intent); 

    } 


    return value; 
    } 

Ou faire selon vous

+0

La vérification de l'appareil, qu'il s'agisse d'une tablette ou d'un téléphone, est acceptable. Le problème est le paramètre manifeste pour le 'TabletMainActivity.java' pour le lanceur et le' PhoneMainActivity.java'. – Hilfritz

+0

Merci, mais ce n'est pas la réponse à la question/problème. – Hilfritz

+0

Je pense que Er. Arjun a la bonne réponse, mais il a oublié de spécifier que vous avez besoin d'une autre activité, où le code mentionné comprend, par exemple StartActivity ... Dans cela vous mettez le code puis lancez votre SmartphoneActivity ou TabletActivity –