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