isTablet? - isSmartphone?

  • Antworten:32
  • Bentwortet
Gelöschter Account
  • Forum-Beiträge: 29

25.11.2012, 22:49:38 via Website

Hallo,

weis jemand, ob es eine Möglichkeit gibt via Programmcode herauszufinden, ob das Endgerät ein Tablet oder ein "normales" Smartphone ist?

LG Samuel

Antworten
Gelöschter Account
  • Forum-Beiträge: 29

26.11.2012, 09:29:05 via App

Danke, das werde ich mir nachher gleich mal anschauen.

Ab welcher Bildschirmgröße ist das Gerät ein Tablet?

Gruß Samuel

Antworten
Gelöschter Account
  • Forum-Beiträge: 29

26.11.2012, 14:00:36 via App

mir geht es in erster Linie darum herauszufinden ob ein Gerät den Menubutton hat, da ja ein Tablet keinen hat. Gäbe es da noch eine Möglichkeit das herauszufinden?

LG Samuel

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

26.11.2012, 14:05:26 via Website

Samuel P.
mir geht es in erster Linie darum herauszufinden ob ein Gerät den Menubutton hat, da ja ein Tablet keinen hat. Gäbe es da noch eine Möglichkeit das herauszufinden?
Also mein Tablet hat einen virtuellen in der Leiste am unteren Bildschirm-Rand.
Sollte eigentlich jedes Tablet bei Apps anzeigen, die noch ein Menü nach Android 2.x Standard nutzen.
Falls du auf einen Hardware Button hinaus willst, gibt es die inzwischen bei vielen Android 4.x Geräten garnicht mehr (auch bei Smartphones), also würde ich mich da auch nicht allzusehr drauf einschießen.

Antworten
Gelöschter Account
  • Forum-Beiträge: 29

26.11.2012, 14:29:57 via App

ja genau den Hardware Button meine ich. Gibt es programmiertechnisch eine Möglichkeit herauszufinden ob ein Gerät diesen Button hat?

LG Samuel

Antworten
Stephan
  • Forum-Beiträge: 2.142

26.11.2012, 14:32:27 via App

Samuel P.
ja genau den Hardware Button meine ich. Gibt es programmiertechnisch eine Möglichkeit herauszufinden ob ein Gerät diesen Button hat?

LG Samuel
wozu?wie wäre es einfach mit anschauen?

Google unser im Smartphone,
gereinigt werde dein RAM
dein Update komme
dein Reboot geschehe
wie im Smartphone, so auch auf dem Tablet
Unsere täglich App gib uns heute
und vergib uns unseren Root
wie auch wir vergeben unseren Providern
und führe uns nicht in Versuchung
sondern erlöse uns von Bugs
Denn dein ist der Wipe
und der Kernel
und die Custom Rom
im Download-Mode.
Android

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

26.11.2012, 14:39:26 via Website

Samuel P.
ja genau den Hardware Button meine ich. Gibt es programmiertechnisch eine Möglichkeit herauszufinden ob ein Gerät diesen Button hat?
Nicht dass ich wüsste.
Höchstens gegen eine Datenbank aller möglichen Geräte abgleichen.
Finde ich aber auch fragwürdig eine App dahingehend zu programmieren. Warum tust Du das? :)

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

26.11.2012, 14:43:56 via Website

Stephan
Samuel P.
ja genau den Hardware Button meine ich. Gibt es programmiertechnisch eine Möglichkeit herauszufinden ob ein Gerät diesen Button hat?

LG Samuel
wozu?wie wäre es einfach mit anschauen?
Eine App kann so schlecht von außen auf das Gerät gucken...

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Gelöschter Account
  • Forum-Beiträge: 29

26.11.2012, 14:47:24 via App

Rafael K.

Finde ich aber auch fragwürdig eine App dahingehend zu programmieren. Warum tust Du das? :)

Weil ich eine App geschrieben habe die ein MENU hat und wenn ein Gerät kein Menubutton hat kommt man damit nicht ins Menu.

LG Samuel

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

26.11.2012, 14:49:23 via Website

Hi,

m. E. geht das mit dem Menü automatisch. Wenn kein Menü-Button, dann Drei-Punkte-Button in der App-Title Bar....

Ist zumindest bei meinen Apps so. Ich weiß gerade nicht, ob ich dafür was besonderes tun musste...

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

26.11.2012, 14:50:44 via Website

Samuel P.
Rafael K.

Finde ich aber auch fragwürdig eine App dahingehend zu programmieren. Warum tust Du das? :)

Weil ich eine App geschrieben habe die ein MENU hat und wenn ein Gerät kein Menubutton hat kommt man damit nicht ins Menu.
Wie kommst du darauf?
Meine App hat auch ein Menü und mein Tablet keinen Hardware-Menü Button.
Wie bereits gesagt wird dann ein virtueller Menü Button eingeblendet.

EDIT: Da war Carsten wohl schneller :)

— geändert am 26.11.2012, 14:51:04

Antworten
Stephan
  • Forum-Beiträge: 2.142

26.11.2012, 14:52:10 via App

Carsten Müller
Stephan
Samuel P.
ja genau den Hardware Button meine ich. Gibt es programmiertechnisch eine Möglichkeit herauszufinden ob ein Gerät diesen Button hat?

LG Samuel
wozu?wie wäre es einfach mit anschauen?
Eine App kann so schlecht von außen auf das Gerät gucken...

Herzliche Grüße

Carsten
ja aber wenn ich ein Gerät habe kann ich doch drauf schauen oder Bilder im Netz!
finde kein sinnvollen Grund warum es so eine Apple geben sollte

Google unser im Smartphone,
gereinigt werde dein RAM
dein Update komme
dein Reboot geschehe
wie im Smartphone, so auch auf dem Tablet
Unsere täglich App gib uns heute
und vergib uns unseren Root
wie auch wir vergeben unseren Providern
und führe uns nicht in Versuchung
sondern erlöse uns von Bugs
Denn dein ist der Wipe
und der Kernel
und die Custom Rom
im Download-Mode.
Android

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

26.11.2012, 15:01:45 via Website

Stephan

ja aber wenn ich ein Gerät habe kann ich doch drauf schauen oder Bilder im Netz!
finde kein sinnvollen Grund warum es so eine Apple geben sollte
Es geht hier um App-Entwicklung...

Herzliche Grüße

Carsten

— geändert am 26.11.2012, 15:02:10

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Gelöschter Account
  • Forum-Beiträge: 29

26.11.2012, 15:07:25 via App

Also, mein Problem ist folgendes:

« Karin am Sonntag, 25.
November 2012 um 15:08 Version
3.0.1 Deutsch
Bitte auch fürs Tablet funktionsfähig
machen Fürs Smartphone sehr
gut.Smartphone hat eine Menutaste für
das Spiel,das Tablet hat eine solche Taste
nicht.Daher komme ich mit dem Tablet
absolut nicht ins Menü.Das Menü müsste
dann innerhalb des Spielfeldes sein.Das
Menü sollte als Startbild
fungieren,Einstellungen machen,dann das
Spiel starten.So wie bei Logik
(Mastermindclone). »

Das ist meine App ihr könnt sie im Play Store runterladen. Sie heißt MasterMind, bzw. MasterMind free.
https://play.google.com/store/apps/details?id=de.sam.master&feature=search_result#?t=W251bGwsMSwyLDEsImRlLnNhbS5tYXN0ZXIiXQ..
oder ihr könnt sie hier auf meiner Entwicklerseite runterladen.

LG Samuel

Antworten
Gelöschter Account
  • Forum-Beiträge: 29

26.11.2012, 15:26:29 via Website

Vielen Dank, Carsten.
Das heißt, ich soll meine App komplett umbauen und den Menubutton weglassen?

LG Samuel

— geändert am 26.11.2012, 15:26:59

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

26.11.2012, 15:54:17 via Website

Hi Samuel,

habe mir Deine App mal angeschaut auf einem Android 4 Smartphone (kein Tablet!). Auch dort habe ich kein Menü, da das Gerät keine Hardware-Menü-Taste hat.

Es ist also kein Tablet-Problem, sondern ein API Problem.

Im verlinkten Artikel wird erklärt, wie dem Problem mit minSDKVersion und TargetSDKVersion beizukommen ist.

Herzliche Grüße

Carsten

— geändert am 26.11.2012, 15:54:34

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Gelöschter Account
  • Forum-Beiträge: 29

26.11.2012, 15:59:36 via App

ok gut. Vielen Dank Carsten. Das werde ich mir gleich mal anschauen.

LG Samuel

Antworten
Andreas Weichert
  • Forum-Beiträge: 287

27.11.2012, 16:19:11 via Website

Carsten Müller
Hi,

m. E. geht das mit dem Menü automatisch. Wenn kein Menü-Button, dann Drei-Punkte-Button in der App-Title Bar....

Ist zumindest bei meinen Apps so. Ich weiß gerade nicht, ob ich dafür was besonderes tun musste...

Herzliche Grüße

Carsten

Bin jetzt ein wenig verwirrt.
Es geht doch um das Optionsmenu. Ich bin davon ausgegangen, wenn keine Hardwarebutton dafür vonhanden ist wird dieser (und andere Buttons) unten dargestellt werden (So habe ich z.B. bei Mediamark auf den Tablets immer gesehen - die fehlenden Hardwarebuttons werden eben softwaretechnisch nachgebildet.
Diese Nachbildung wird aber nicht innerhalb der App gemacht (in der App-Titlebar - meine App hat namlich keine Titlebar) sonder außerhalb der App immer sichtbar.
Wie ist das nun? Ohne Titlebar kein Optionsmenü?

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

27.11.2012, 16:22:28 via Website

Wo der virtuelle Menü-Button plaziert wird, ist bei Android leider leider nicht konsistent. Der ist mal da, mal dort. Ich habe das noch nicht durchgeblickt...

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Andreas Weichert
  • Forum-Beiträge: 287

27.11.2012, 16:44:16 via Website

Wenn man das Optionsmenu in meine App nicht findet ist sie praktisch nicht zu gebrauchen. Das würde den Rückgang im Playstore erklären.
Hast Du zufälligerweise ein höheres Android-Gerät > 4 zur Verfügung und könntes meine App testen?
Werde heute abend mal im Emulator testen - der hat aber immer Hardwarebuttons - weiß nicht wie autentisch das ist.

— geändert am 27.11.2012, 16:46:08

Antworten
Tobias Eckert
  • Forum-Beiträge: 155

28.11.2012, 19:47:45 via Website

Wenn Du entweder den Wert min-sdk oder target-sdk im Manifest auf 11 oder höher setzt, geht Android davon aus dass Du keine klassischen Menüs verwendest sondern die ActionBar. Android stellt dann keinen Menü-Button mehr dar,

Du musst also entweder das target-sdk auf 10 oder kleiner setzen, oder sowohl Menüs (für Android Geräte mit Version 10 oder kleiner) als auch eine ActionBar (für die Versionen ab Honeycomb) implementieren.

Antworten
Andreas Weichert
  • Forum-Beiträge: 287

29.11.2012, 15:32:59 via Website

Aha !
Habe nur <uses-sdk android:minSdkVersion="8" /> gesetzt.
Laut doku ist dann targetSdkVersion auch 8. Müßt also klappen.

In Project.properties habe ich gesetzt: target=android-16

Das macht ja keine Probleme?
Man sollte ja immer das neuste SDK verwenden - oder ?

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

29.11.2012, 15:36:47 via Website

Andreas Weichert
Aha !
Habe nur <uses-sdk android:minSdkVersion="8" /> gesetzt.
Laut doku ist dann targetSdkVersion auch 8. Müßt also klappen.

In Project.properties habe ich gesetzt: target=android-16

Das macht ja keine Probleme?
Man sollte ja immer das neuste SDK verwenden - oder ?
Du musst MINDESTENS das benutzen, das die Methoden bietet, die du verwendest, weil sonst der Compiler die Grätsche macht.
Gibst du bei target was höheres an als den minSdk im Manifest, bist du aber selbst dafür verantwortlich sicherzustellen, dass du keine Methoden verwendest, die erst in späteren Version hinzukommen.
Denn kompilieren wird das ganze dann erfolgreich, wenn es aber einer auf einem alten Android installiert, fliegt es ihm um die Ohren.
Um ganz sicher zu gehen, kann man solche Methoden dann per Reflection aufrufen.

— geändert am 29.11.2012, 15:37:10

Antworten
Andreas Weichert
  • Forum-Beiträge: 287

29.11.2012, 16:22:31 via Website

Ich fasse nochmal zusammen:
Wenn ich Funktionen benutze, die nicht in dem verwendeten SDK vorkommen läßt sich nicht kompilieren. - klar!

Wenn ich Funktionen eines neueren SDK verwende und dieses target auch im Manifest angeben rufen ich Funktionen auf,
die auf niedrigen Androidversionen nicht existieren. -> Absturz.
Wenn ich aber ein niedriges targetSDK im Manifest angebe werden diese höheren Funktionen auf alten Handys irgenwie "simuliert" oder umgbildet und auf neuen "direkt" ausgefürht.
Ich hoffen das habe ich jetzt richtig verstanden.

Jetzt ist mir noch nicht klar, da ich eigentlich keine Funktionen der höheren SDKs brauche, ob es besser ist gleich gegen das niedrige zu compilieren.
Also gerade so hoch das BuidSDK zu setzen das es compiliert.
Haben die neuen/alten SDKs Vorteile/Nachteile (Bugs - schneller - AppGröße)?

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

29.11.2012, 16:30:41 via Website

Andreas Weichert
Ich fasse nochmal zusammen:
Wenn ich Funktionen benutze, die nicht in dem verwendeten SDK vorkommen läßt sich nicht kompilieren. - klar!

Wenn ich Funktionen eines neueren SDK verwende und dieses target auch im Manifest angeben rufen ich Funktionen auf,
die auf niedrigen Androidversionen nicht existieren. -> Absturz.
Wenn ich aber ein niedriges targetSDK im Manifest angebe werden diese höheren Funktionen auf alten Handys irgenwie "simuliert" oder umgbildet und auf neuen "direkt" ausgeführt.
Ich hoffen das habe ich jetzt richtig verstanden.
Bis auf den letzten Punkt richtig.
Wogegen du kompilierst legt der Wert target in den project.properties fest (nicht im manifest).

Beispiel zu dem o.g. Problem:
Wenn du in den properties von mir aus 14 angibst, aber im manifest minSDK 8 hast, heißt das nur, dass du Nutzern ab Android 8 erlaubst die App zu installieren. Android prüft nicht, ob deine App tatsächlich mit diesem API Level korrekt läuft.
Nutzt du nun eine Methode, die in 11 ergänzt wurde, wird es problemlos kompilieren und bei bei nutzern >= 11 auch laufen, bei Nutzern < 11 aber abstürzen.
Andreas Weichert

Jetzt ist mir noch nicht klar, da ich eigentlich keine Funktionen der höheren SDKs brauche, ob es besser ist gleich gegen das niedrige zu compilieren.
Also gerade so hoch das BuidSDK zu setzen das es compiliert.
Haben die neuen/alten SDKs Vorteile/Nachteile (Bugs - schneller - AppGröße)?
Die Performance/Bugs werden nicht davon festgelegt wogegen du kompilierst, sondern von dem Gerät auf dem es tatsächlich läuft.
Du kompilierst nur gegen Interfaces...nicht gegen einem Implementierung.
Ich würde also empfehlen gegen die niedrigste mögliche Version zu kompilieren, weil du damit schon zur Compile Zeit siehst, wenn du "zu neue" Methoden benutzt.

— geändert am 29.11.2012, 16:32:36

Antworten
Andreas Weichert
  • Forum-Beiträge: 287

29.11.2012, 16:52:43 via Website

[quote=Rafael K.]
Andreas Weichert

Wenn ich aber ein niedriges targetSDK im Manifest angebe werden diese höheren Funktionen auf alten Handys irgenwie "simuliert" oder umgbildet und auf neuen "direkt" ausgeführt.
Ich hoffen das habe ich jetzt richtig verstanden.
Bis auf den letzten Punkt richtig.
Wogegen du kompilierst legt der Wert target in den project.properties fest (nicht im manifest).

Beispiel zu dem o.g. Problem:
Wenn du in den properties von mir aus 14 angibst, aber im manifest minSDK 8 hast, heißt das nur, dass du Nutzern ab Android 8 erlaubst die App zu installieren. Android prüft nicht, ob deine App tatsächlich mit diesem API Level korrekt läuft.
Nutzt du nun eine Methode, die in 11 ergänzt wurde, wird es problemlos kompilieren und bei bei nutzern >= 11 auch laufen, bei Nutzern < 11 aber abstürzen.
[quote=Andreas Weichert]
[quote=Rafael K.]
Durch nur minSDK=8 ist klar das es nicht läuft, aber durch TargetSDK=8 im Manifest wird das doch so gemacht wie ich beschrieben habe?
Die neuen Funktionen werden auf alten Handy simuliert. Ich kann doch das Actionmenu einbauen, dann erhalten ich immer das Actionmenu:
Bein neuen Handy das direkte vom Betriebsystem - bei alten irgenwie nachgebildet?

— geändert am 29.11.2012, 16:53:55

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

29.11.2012, 21:50:02 via Website

Andreas Weichert
Durch nur minSDK=8 ist klar das es nicht läuft, aber durch TargetSDK=8 im Manifest wird das doch so gemacht wie ich beschrieben habe?
Die neuen Funktionen werden auf alten Handy simuliert. Ich kann doch das Actionmenu einbauen, dann erhalten ich immer das Actionmenu:
Bein neuen Handy das direkte vom Betriebsystem - bei alten irgenwie nachgebildet?
Also ich weiß ja nicht wie du dir das vorstellst.
Ein Fiat Panda wird auch nicht zum Ferrari nur weil du Vettel ans Steuer setzt.
Was die Laufzeitumgebung (das Handy) nicht anbietet, kann deine App nicht nutzen. So einfach ist das.

Wenn das Handy eine Android Version einsetzt, die gewisse Funktionen nicht anbietet, wird da nichts emuliert. Android ist kein Zauberwürfel. Funktionen, die erst ab Android 4.0 drin sind, sind vor Android 4.0 eben nicht drin und deine Aufrufe laufen ins Leere. Force-Close.

Du kannst eine ActionBar selbst nachprogrammieren, das Support-Package benutzen, oder Actionbar Sherlok, um auch auf alten Devices eine ActionBar zu haben, aber da passiert rein garnichts automatisch.

Nochmal: Wenn du gegen ein neues SDK kompilierst, wird da nicht auf magische Art und Weise ein Teil von Android 4.0 mit in deine App hineingezaubert. Das SDK ist nur eine Beschreibung welche Methoden verfügbar sind. Da steckt KEINE FUNKTION hinter.
Welche Funktionen du nutzen kannst gibt einzig und allein das Gerät und die Android Version vor auf dem die App läuft.

Noch was zum targetSDK. Das ist die (idR höchste) Android Version für die du deine App offiziell freigibst, z.B. weil du sie mit dieser Version getestet hast. Neuere Android Versionen verhalten sich unter Umständen anders als alte. Android 4.0 kann aber in eine Art Kompatibilitätsmodus zurückschalten, wenn es eine App ausführt, deren targetSDK 2.3 ist, um Fehlverhalten zu vermeiden, wenn diese App nur auf Android 2.3 freigegeben ist.

— geändert am 29.11.2012, 22:02:47

Antworten
Andreas Weichert
  • Forum-Beiträge: 287

30.11.2012, 09:28:26 via Website

Jetzt habe ich es kapiert. Danke für die ausführliche Beschreibung!

Ist also ein Dilemma: Neue Versionen bieten erweiterte Funktionalität und bringen Android als System voran - wenn man aber die Kompatibilität mit alten Androidversionen beibehalten will, kann man die neuen Funktionen nicht benutzen.
Es sei den man bildet sie selber nach bzw. verwendet das Support-Package (mit teilweiser Nachbildung) wodurch die neue Funktionalität direkt in die App gelinkt wird.
Werde mich mal genauer mit dem Support-Package befassen.

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

30.11.2012, 09:48:42 via Website

Jetzt hammwas :)

Du kannst auch per Reflection prüfen, ob bestimmte Methoden vorhanden sind und die nur aufrufen, wenn sie gefunden werden.
Das mache ich z.B. beim Auslesen von Informationen aus dem EXIF-Tag eines JPEG Bildes.
Die Methode dafür gibt es erst sein 2.x während quasi alle meine Apps ab 1.6 laufen.

Antworten