5

私はこれらを持っています:

  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-feature android:name="android.hardware.location.gps" android:required="false" />      

そして、これを行うことで自分で GPS を確認できます。

locationManager = (LocationManager) 
    context.getSystemService(Context.LOCATION_SERVICE);

fSupportsGPS = (locationManager.getAllProviders().
    contains(LocationManager.GPS_PROVIDER));

しかし、私はまだいくつかの疑問を持っています。Wi-Fi/GPS/ネットワークが利用できないデバイスでアプリを実行したい。私が GPS を使用する唯一の理由は、Google マップでユーザーの場所を表示することです。(そして、それはアプリの他の部分と比較して小さな機能なので、私はそれに対する要件を持ちたくありません。)

4

2 に答える 2

7

<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" />
于 2013-03-15T11:17:11.313 に答える
2

これandroid:required="false"/>でうまくいくはずです。Androidではカメラとは見なされないフロントサイドカメラしかないNexus7があります。また、カメラの要件により、Play ストアのアプリでサポートされているデバイスのリストに表示されませんでした。

次のように required=false を追加する

<uses-feature android:name="android.hardware.camera" android:required="false"/>

現れるようにしました。

于 2013-03-15T10:49:25.100 に答える