Ich habe an vielen Stellen gehört, dass meine App, wenn sie eine Berechtigung verwendet, die für ein bestimmtes Gerät nicht gilt, nicht im Play Store für dieses Gerät angezeigt wird. Jetzt spiele ich in meinem Code Audio ab. Ich schalte das Audio stumm, wenn ein Anruf eingeht:
private PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (state == TelephonyManager.CALL_STATE_RINGING) {
onPhoneCallInterrupt(); //Method I made that mutes audio for phone call
} else if (state == TelephonyManager.CALL_STATE_IDLE) {
} else if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
onPhoneCallInterrupt(); //Method I made that mutes audio for phone call
}
}
};
Dies verwendet nun die folgende Berechtigung im Manifest:
<uses-feature android:name="android.permission.READ_PHONE_STATE" android:required="false" />
Bekomme ich Ausnahmen, weil ich die Berechtigung android:required = "false"
auf Geräten ohne Telefonkompatibilität (Tablets) optional gemacht habe?
Der Grund, warum ich diesbezüglich so verwirrt bin, ist, dass ich überprüfe, ob das Telefon verwendet wird, aber ich benutze es nicht. Funktioniert meine App auf Tablets, geschweige denn im Play Store?
Vielen Dank, dass Sie mir geholfen haben, diese Verwirrung zu beseitigen.
Ruchir
Antworten:
Ja, Google Play filtert Inhalte heraus, die für das aktuelle Gerät nicht geeignet sind. Wenn Ihr Gerät keine Kamera hat, sollten keine Kamera-Apps für Sie sichtbar sein. Möglicherweise sehen Sie jedoch weiterhin Apps, die die Kamera als Nebenfunktion verwenden. Die Unterscheidung erfolgt durch die Verwendung von
android:required
bei der Deklaration eines verwendeten Features.Beachten Sie, dass sich die Berechtigungen von den Funktionen unterscheiden. Berechtigungen dienen der Sicherheit und Sie erklären die Verwendung von Berechtigungen durch das
<uses-permission>
Tag. Features hingegen dienen der Kompatibilität und Sie erklären die Verwendung von Features durch das<uses-feature>
Tag.Google Play filtert Ihre Anwendung basierend auf den verwendeten Funktionen. Selbst wenn Sie niemals
<uses-feature>
Tags in Ihrer Android-Manifest-Datei deklarieren, wird Ihre App möglicherweise dennoch gefiltert. Dies liegt daran, dass Google auch alle Ihre deklarierten Berechtigungen durchliest und auf alle Funktionsanforderungen schließt, die Sie nicht explizit deklariert haben. Wenn Sie also dieREAD_SMS
Berechtigung deklarieren, bedeutet dies die Verwendung derandroid.hardware.telephony
Funktion. Es wird also nicht auf Tablets oder anderen Geräten ohne Telefonfunktion angezeigt.Diesen Abschnitt hier zitieren :
Um zu vermeiden, dass Ihre App in Google Play basierend auf einer bestimmten Funktion gefiltert wird, die Ihre App verwendet, müssen Sie sie explizit mit dem
android:required
Wert false deklarieren . Beachten Sie jedoch, dass Sie überprüfen müssen, ob die Funktion zur Laufzeit vorhanden ist, da nicht mehr garantiert ist, dass sie auf dem Gerät vorhanden ist, auf dem Ihre App ausgeführt wird.Beispiel dafür, was Ihre AndroidManifest.xml enthalten sollte.
Und ein Zitat darüber, wie Google Apps basierend auf explizit deklarierten Funktionen filtert. Verknüpfung
Wenn Sie Berechtigungen verwenden, für die eine Funktion erforderlich ist, lesen Sie diese Liste . Sie sollten diese Funktion explizit mit der Funktion
android:required="false"
daneben deklarieren, und schon kann es losgehen. Da diese Funktion jedoch nicht garantiert vorhanden ist, müssen Sie auch überprüfen, ob die Funktion zur Laufzeit vorhanden ist, bevor Sie Methoden verwenden, die dies erfordern. Andernfalls stürzt ein Tablet abPhone.call(5551234)
, währendandroid:required="true"
Sie nicht überprüfen müssen, ob das Telefon vorhanden ist, wie es sein muss, da sonst Ihre App herausgefiltert werden sollte. Obwohl Sie es trotzdem überprüfen möchten, da die Leute es möglicherweise aus anderen Quellen installieren, sollten Sie dies berücksichtigen.Beispiel für die Überprüfung der Funktion zur Laufzeit.
Wenn Sie weitere Fragen dazu haben, empfehle ich Ihnen wirklich, diese durchzulesen:
quelle