2017-07-21 3 views
0

J'écris une application qui servira pour la télévision et le smartphone. Pour l'instant, je veux juste différencier l'écran principal en fonction de l'appareil. J'ai placé des fragments, qui sont donc disposés différemment selon l'appareil. Mais quand je lance l'application à la télévision, il est tvActivity qui est lancé mais le MainActivityAndroidTv et Smartphone dans une application/lanceur différent

Aussi, j'ai 2 lance dans le manifeste, un

<action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 

et l'autre

<action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 

Voici mon code:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.jamesp.fragmenttest"> 

    <uses-feature android:name="android.software.leanback" 
     android:required="false" /> 


    <!--Unsupported TV hardware features--> 
    <uses-feature android:name="android.hardware.touchscreen" 
     android:required="false"/> 
    <uses-feature android:name="android.hardware.faketouch" 
     android:required="false"/> 
    <uses-feature android:name="android.hardware.telephony" 
     android:required="false"/> 
    <uses-feature android:name="android.hardware.camera" 
     android:required="false"/> 
    <uses-feature android:name="android.hardware.nfc" 
     android:required="false"/> 
    <uses-feature android:name="android.hardware.location.gps" 
     android:required="false"/> 
    <uses-feature android:name="android.hardware.microphone" 
     android:required="false"/> 
    <uses-feature android:name="android.hardware.sensor" 
     android:required="false"/> 



    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme" 
     android:banner="@mipmap/ic_launcher"> 



     <activity android:name=".MainActivity" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 


     <activity android:name=".TvActivity" 
      android:label="@string/app_name" 
      android:theme="@style/Theme.Leanback"> 

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


    </application> 

</manifest> 

TvActivity:

public class TvActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_tv); 

    } 
} 

MainActivity:

public class MainActivity extends AppCompatActivity { 
    public static final String TAG = "TAG"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE); 
     if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) { 
      Log.d(TAG, "Running on a TV Device"); 
      setContentView(R.layout.activity_tv); 
     } else { 
      setContentView(R.layout.activity_main); 
      Log.d(TAG, "Running on a non-TV Device"); 
     } 
    } 
} 

Avec ce test, je peux différencier et donc choisir la mise en page à droite, mais je ne comprends pas pourquoi TV lance MainActivity.

Merci

+0

probablement vous devez créer un dossier de mise en page resuce avec des tailles d'écran support TV, essayez de lire la documentation sur ce lien https://developer.android.com/guide/ practices/screens_support.html –

+0

Merci pour le lien! En fait, je viens de remarquer quelque chose, si j'inverse l'ordre des activités dans le manifeste, c'est le premier qui compte. Si je place TvActivity avant MainActivity les deux appareils (TV et smartphone) lanceront TvAcitivty. Alors, comment faire la différence? Est-il possible d'avoir plusieurs "launchActivity"? – Jamesp

+0

Je n'essaie jamais de faire une application na avec deux activités lanceur, quand j'ai besoin d'une mise en page diferent dans différents écrans je fais ce que Google recommande mais vous pouvez essayer de recherche dans Google. –

Répondre

0

Utilisez ceci comme votre manifeste. Ça va marcher.

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 

<uses-feature 
    android:name="android.hardware.touchscreen" 
    android:required="false" /> 
<uses-feature 
    android:name="android.software.leanback" 
    android:required="true" /> 


<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/Theme.Leanback"> 
    <activity 
     android:name=".MainActivity" 
     android:banner="@drawable/app_icon_your_company" 
     android:icon="@drawable/app_icon_your_company" 
     android:label="@string/app_name" 
     android:logo="@drawable/app_icon_your_company" 
     android:screenOrientation="landscape"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
      <category android:name="android.intent.category.LEANBACK_LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".DetailsActivity" /> 
    <activity android:name=".PlaybackOverlayActivity" /> 
    <activity android:name=".BrowseErrorActivity" /> 
</application>