app für mit und ohne telefon

  • Antworten:5
Thomas Seeling
  • Forum-Beiträge: 32

13.12.2011, 10:44:41 via Website

Hallo,

ich hab eine App, die (derzeit) die Berechtigung zum Telefonieren braucht. Es geht um einen regionalen Notdienstkalender für Tierärzte, und das Wählen einer bestimmten Rufnummer ist eine Bequemlichkeit, aber kein Muss für die App. Man könnte das auch locker weglassen.

Das bedeutet aber, dass sie im Market nicht angezeigt wird, wenn ich mit dem Tablet komme, und am PC sehe ich "nicht kompatibel mit ihrem Gerät".

Ich würde aber gern die App auch auf Tablets ohne Telefon haben, nur halt dann ohne die spezielle Telefonfunktion.

a) ist es möglich, *eine* App zu erstellen, die ein Telefon benutzt, wenn es da ist, aber auch ohne Telefon funktioniert?
b) wie finde ich heraus, ob die App die Telefonfunktion benutzen kann?

Oder müsste ich
c) 2 Apps erstellen?

Danke schonmal ;)

Tschau..Thomas

Antworten
Florian B.
  • Forum-Beiträge: 284

13.12.2011, 11:37:57 via Website

Ich glaube dieser Eintrag vom Google Developer Blog sollte dir weiterhelfen. Daher sollte es auch mit einer App funktionieren.

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

13.12.2011, 12:17:15 via Website

du kannst im manifest
<uses-feature>

nutzen

da kannst dann sagen, dass du telefon zwar nutzt, es aber nicht zwingend ist. im code dann einfach abchecken ob telefon verfügbar ist und die gewählte aktion ausführen

swordiApps Blog - Website

Antworten
Thomas Seeling
  • Forum-Beiträge: 32

13.12.2011, 13:27:32 via Website

ok, ich hab jetzt ein explizites
1<uses-feature android:name="android.hardware.telephony" android:required="false"/>

und im Code setze ich quick+dirty die Buttons auf disable, wenn ich kein Telefon finde.
später würd ich dann gern für diesen Fall das Button-Layout gern gegen ein TextView tauschen.

1Button btel1=(Button)findViewById(R.id.tel1);
2 if (Tools.isIntentAvailable(this/*getBaseContext()*/,Intent.ACTION_CALL)) {
3/* if running on a phone */
4 }
5 else {
6/* show button but disabled */
7 btel1.setEnabled(false);
8 }

aber beim Starten der App mit Eclipse seh ich trotzdem im logcat

1D/PackageManager( 71): Scanning package com.ths.wtndk
2E/PackageManager( 71): Package com.ths.wtndk requires unavailable feature android.hardware.telephony; failing!
3W/PackageManager( 71): Package couldn't be installed in /data/app/com.ths.wtndk-1.apk

der output vom aapt dump badging sagt mir auch, dass ich uses-feature verwende, ich seh aber keinen Hinweis auf required="false".
kann ich das uses-permission weglassen? oder darf dann meine App den Intent CALL_PHONE gar nicht benutzen?
Ich will ja in meiner App gar nicht selbst telefonieren, sondern die Telefonanwendung wählen lassen.
was mach ich falsch?

edit: fehler gefunden, das Attribut heißt android:required, und jetzt kann ich die App auch auf ein Tablet ohne Telefon schicken.
Der Button wird dann ausgegraut.

Vielen Dank für die schnelle Hilfe!

— geändert am 13.12.2011, 16:04:20

Antworten
Thomas Seeling
  • Forum-Beiträge: 32

15.12.2011, 12:43:31 via Website

Florian B.
Ich glaube dieser Eintrag vom Google Developer Blog sollte dir weiterhelfen. Daher sollte es auch mit einer App funktionieren.

funktioniert einwandfrei mit meinem i9000.
Ein Bekannter hat ein HTC HD2 von Win auf Android umgeflasht, und er sieht die App nicht im Market.
Wenn er die .apk manuell installiert, verhält sie sich so, als ob keine Telefonfunktion vorhanden wäre.
Ich habe exakt die Abfrage aus dem o.g. Blog übernommen, und beim HTC ist die Abfrage negativ ...?

Antworten
Thomas Seeling
  • Forum-Beiträge: 32

16.12.2011, 14:35:23 via Website

funktioniert doch nicht so toll, wie ich dachte.
obwohl ich auf einem Emulator mit Telefon(simulation) teste, liefert mir die Abfrage bei Intent.ACTION_CALL leider false.
Hab noch ein bißchen gesucht und verwende jetzt den TelephonyManager.
Da bekomme ich den getPhoneType() == 1 (TYPE_GSM).

1public static boolean isPhone(Context context) {
2 final TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
3 if (tm.getPhoneType()!=TelephonyManager.PHONE_TYPE_NONE) {
4 return true;
5 }
6 return false;
7 }

Antworten