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 die READ_SMS
Berechtigung deklarieren, bedeutet dies die Verwendung der android.hardware.telephony
Funktion. Es wird also nicht auf Tablets oder anderen Geräten ohne Telefonfunktion angezeigt.
Diesen Abschnitt hier zitieren :
Hinweis: Einige Systemberechtigungen erfordern implizit die Verfügbarkeit einer Gerätefunktion. Wenn Ihre App beispielsweise die Berechtigung zum Zugriff auf BLUETOOTH anfordert, ist implizit die Gerätefunktion FEATURE_BLUETOOTH erforderlich. Sie können die Filterung basierend auf dieser Funktion deaktivieren und Ihre App für Geräte ohne Bluetooth verfügbar machen, indem Sie das erforderliche Attribut im Tag auf "false" setzen. Weitere Informationen zu implizit erforderlichen Gerätefunktionen finden Sie unter Berechtigungen, die Funktionsanforderungen implizieren.
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.
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-feature android:name="android.hardware.telephony" android:required="false" />
Und ein Zitat darüber, wie Google Apps basierend auf explizit deklarierten Funktionen filtert. Verknüpfung
Eine explizit deklarierte Funktion ist eine, die Ihre Anwendung in einem Element deklariert. Die Feature-Deklaration kann ein Android enthalten: required = ["true" | Attribut "false"] (wenn Sie mit API-Level 5 oder höher kompilieren), mit dem Sie angeben können, ob die Anwendung die Funktion unbedingt benötigt und ohne sie nicht ordnungsgemäß funktioniert ("true") oder ob die Anwendung die Funktion bevorzugt falls verfügbar, aber so konzipiert, dass es ohne es ausgeführt werden kann ("false").
Google Play behandelt explizit deklarierte Funktionen folgendermaßen:
- Wenn eine Funktion ausdrücklich als erforderlich deklariert wird, fügt Google Play die Funktion der Liste der erforderlichen Funktionen für die Anwendung hinzu. Anschließend wird die Anwendung von Benutzern auf Geräten gefiltert, die diese Funktion nicht bereitstellen. Zum Beispiel:
<uses-feature android:name="android.hardware.camera" android:required="true" />
- Wenn eine Funktion ausdrücklich als nicht erforderlich deklariert wird, fügt Google Play die Funktion nicht zur Liste der erforderlichen Funktionen hinzu. Aus diesem Grund wird eine explizit deklarierte nicht erforderliche Funktion beim Filtern der Anwendung niemals berücksichtigt. Auch wenn das Gerät die deklarierte Funktion nicht bietet, betrachtet Google Play die mit dem Gerät kompatible Anwendung und zeigt sie dem Benutzer an, sofern keine anderen Filterregeln gelten. Zum Beispiel:
<uses-feature android:name="android.hardware.camera" android:required="false" />
- Wenn eine Funktion explizit deklariert wird, jedoch ohne das Attribut android: required, geht Google Play davon aus, dass die Funktion erforderlich ist, und richtet eine Filterung dafür ein. Wenn Ihre Anwendung für die Ausführung mit Android 1.6 und früheren Versionen ausgelegt ist, ist das Attribut android: required in der API im Allgemeinen nicht verfügbar, und Google Play geht davon aus, dass alle Deklarationen erforderlich sind.
Hinweis: Indem Sie eine Funktion explizit deklarieren und ein Attribut für android: required = "false" einschließen, können Sie alle Filter in Google Play für die angegebene Funktion effektiv deaktivieren.
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 ab Phone.call(5551234)
, während android: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.
PackageManager pm = getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
// This device does have a phone.
havePhone = true;
}
Wenn Sie weitere Fragen dazu haben, empfehle ich Ihnen wirklich, diese durchzulesen: