Due attività di lancio sul telefono, uno su tavoletta

Sto creando un'applicazione per Android 4.0+, e voglio get questo comportmento. Due diverse attività avranno due icone di avvio quando il dispositivo dell'utente è un telefono e sarà solo uno (le attività saranno costituite da frammenti che verranno visualizzati come tabs in un'attività principale) sui dispositivi tablet. So che è ansible impostare più attività di lancio nel manifesto, ma penso che forse avrei bisogno di qualcosa che determinerà questa operazione durante il runtime (nel codice java).

  • Android Independent Volume Control
  • Tentare di disegnare triangoli testurizzati sul dispositivo non riesce, ma l'emulatore funziona. Perché?
  • Google Drive Android api - Scaricare il file db dall'unità
  • Android IRC Office Hours Domande su Android Bluetooth RSSI
  • Come saldamente memorizzare il token di accesso e segreto in Android?
  • Attività di Android in Eclipse / ADT con le dependencies di progetto (risolvere il problema XY)
  • Crea una class personalizzata View / ViewGroup in Anko DSL
  • La vista statica del field.GONE dovrebbe essere accessibile in modo statico?
  • Emettere il permesso di Google Play
  • Firebase - Come scrivere / leggere i dati per utente dopo l'authentication
  • Disegnare un bitmap su una canvas di canapa è scalata
  • Calendario e PagerAdapter - Viste illimitate
  • 5 Solutions collect form web for “Due attività di lancio sul telefono, uno su tavoletta”

    Due diverse attività avranno due icone di avvio quando il dispositivo dell'utente è un telefono e sarà solo uno (le attività saranno costituite da frammenti che verranno visualizzati come tabs in un'attività principale) sui dispositivi tablet.

    Non c'è concetto in Android di "telefono" e "tablet". Suppongo che stai distinguendo tra "telefono" e "tablet" in termini di dimensione dello schermo.

    Se è vero:

    Passo # 1: Crea un file res/values/bools.xml e definisci due risorse <bool> is_phone e is_tablet . Avere is_phone essere true e is_tablet essere false .

    Passo # 2: Crea un file res/values-.../bools.xml , where ... è qualunque qualificatore che utilizzi con i tuoi layout per distinguere tra "telefoni" e "tavolette" (ad esempio, " -large , " -xlarge , -swNNNdp ). Definire le stesse due risorse <bool> con valori opposti (ad esempio, is_phone è false , is_tablet true ).

    Fase # 3: aggiungere entrambe le attività al tuo manifesto, ciascuna impostazione per il MAIN / LAUNCHER <intent-filter> . Su quello che si desidera utilizzare su un "telefono", aggiungere l' android:enabled="@bool/is_phone" <activity> . Su quello che si desidera utilizzare in un "tablet", aggiungere l' android:enabled="@bool/is_tablet" <activity> .

    In questo modo, in base alle stesse regole utilizzate per i tuoi layout, avrai un'altra attività di avvio.


    A quanto pare, questo non funziona, anche se lo giuro.

    Un'altra opzione è quella di avere una singola attività come MAIN / LAUNCHER . Ha impostato con android:theme="@style/Theme.NoDisplay" , quindi non dispone di un interface utente. Fare in determinazione, in Java, in onCreate() , quale delle vostre attività reali di "entry-point" è appropriata per la dimensione dello schermo specificata, forse utilizzando le stesse risorse bool , citate sopra. Avere quindi chiamato startActivity() per passare il controllo all'attività giusta e chiudere la finish() su di sé (quindi l'utente non incontra un'attività invisibile sullo stack BACK). Questa tecnica viene utilizzata anche nei casi in cui non esiste alcun modo per controllarlo attraverso il manifesto, come ad esempio "abbiamo mappe V1 o no", where hai android:required="false" nell'elemento <uses-library> .

    Al primo avvio dell'applicazione, è ansible controllare in modo programmato se il dispositivo è un tablet o un telefono. Se è un telefono, è ansible aggiungere un collegamento alla schermata iniziale a livello di programmazione e specificare l'intenzione che il lanciatore dovrebbe utilizzare per passare all'attività corretta.

    In primo luogo, nel tuo Manifesto avrai solo un lanciatore, ma avrai un'attività senza filtri d'intenti che verranno aperti dal collegamento creato a livello di programmazione.

    Quindi, nel tuo Activity onCreate dell'avvio del lancio, verificare se hai già creato la scorciatoia. Da quello che ho letto, il modo migliore per farlo è utilizzare un valore boolean in SharedPreferences :

     SharedPreferences prefs = getSharedPreferences(getPackageName(), MODE_PRIVATE); if (!prefs.getBoolean("shortcut", false)) { if (!isTablet(this)) { createShortcut(); } prefs.edit().putBoolean("shortcut", true).commit(); } else { //if the shortcut has already been made, see if that is what was used to open this app if (getIntent() != null) { if (getIntent().getBooleanExtra("shortcut", false)) { //the shortcut was used, so open the other Activity: Intent shortcut = new Intent(this, OtherActivity.class); startActivity(shortcut); } } } 

    Di seguito, devi definire quello che chiami un tablet. Questo è basato sui pixel indipendenti dalla densità dello schermo. Ad esempio, per call dispositivi con compresse da schermo da 7 pollici, questo numero è di 600. Per i dispositivi più grandi, ad esempio uno schermo da 10 pollici, questo numero è di 720. Memorizzare questo numero in una variabile:

     private static final int TABLET_DP = 600; 

    Quindi aggiungere i methods usati sopra:

     public static boolean isTablet(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);\ Display display = wm.getDefaultDisplay(); DisplayMetrics outMetrics = new DisplayMetrics(); display.getMetrics(outMetrics); float density = context.getResources().getDisplayMetrics().density; float dpWidth = outMetrics.widthPixels / density; return dpWidth >= TABLET_DP; } private void createShortcut() { //this is the intent that will be used when the shortcut is clicked. Intent shortcutIntent = new Intent(Intent.ACTION_MAIN); shortcutIntent.setClassName(this, this.getClass().getName()); shortcutIntent.putExtra("shortcut", true); //this is the intent used to create the shortcut. Intent intent = new Intent(); intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));//or however you want the shortcut to be labeled. Parcelable iconResource = Intent.ShortcutIconResource.fromContext( this, R.drawable.ic_launcher);//or whatever you want the icon to be intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource); intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); //tell Android to create the shortcut context.sendBroadcast(intent); } 

    Infine, assicurati di avere le autorizzazioni corrette per installare i collegamenti:

     <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"></uses-permission> 

    Avnetworking bisogno di creare più apks, uno per le tabs e una per i telefoni, l'unica differenza sarà il file manifest in quegli apks. Riposo puoi gestire con il codice.

    Perché prendere tanto dolore? Basta andare a progettare applicazioni separate per telefono e tablet (assicurati di avere lo stesso nome del pacchetto). Multiple APKs è quello che dovresti cercare:

     Although we encourage you to develop and publish a single APK that supports as many device configurations as possible, doing so is sometimes not possible. To help you publish your application for as many devices as possible, Google Play allows you to publish multiple APKs under the same application listing. Google Play then supplies each APK to the appropriate devices based on configuration support you've declared in the manifest file of each APK. 

    Ecco un link: http://developer.android.com/google/play/publishing/multiple-apks.html

    Potrò battere un cavallo morto qui, ma che dire di usare gli alias di layout?

    Utilizza Alias ​​Layout

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.