は<uses-feature ...>
、アプリがその機能を必要とする必要があり、それがないと機能しないことを Android に通知するため、Android はユーザーにアプリをインストールさせません (実際、Play ストア/マーケット プレイスにも表示されません。
これらの機能を持っていないユーザーがアプリをインストールできるようにするにはandroid:required="false"
、適切な機能のオプションを追加するだけです。この XML を使用して、マニフェストで既に行っていること:
<uses-feature android:name="android.hardware.camera" android:required="false"/>
ユーザーがその機能を持っているかどうかを検出するには (現在は必須ではないため)、Android API を使用できます。これは、この Java コードで既に行っています。
locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
fSupportsGPS = (locationManager.getAllProviders().contains(LocationManager.GPS_PROVIDER));
現在、できないことの 1 つは、機能がオプションとしてマークされていても、Android 1.6 以前の機能を使用していないユーザーにアプリをインストールさせることです。これは、この回答android:required
で説明されているように、Android のバージョンがこの機能を認識しないためです。
留意すべきもう 1 つの点は、一部の<uses-permission ...>
タグは、パーミッションの暗黙の要件をトリガーすることです。
この問題に対処するには、ドキュメントから引用します:
Google Play が特定の暗黙の機能に基づいてフィルタリングすることを望まない場合は、その動作を無効にすることができます。これを行うには、要素で機能を明示的に宣言し、android:required="false" 属性を含めます。たとえば、CAMERA パーミッションから派生したフィルタリングを無効にするには、以下に示すように機能を宣言します。
<uses-feature android:name="android.hardware.camera" android:required="false" />
このページによると<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
、 はネットワークの要件を意味します。これを無効にするには、これをマニフェストに追加します。
<uses-feature android:name="android.hardware.location.network" android:required="false" />