1

複数の便利な機能を備えたアプリを構築しています。1 つのアクティビティでは、Google マップを使用します。ユーザーが必要に応じてこの機能を使用できるようにすることはできますが、それを使用できない古い電話からは除外できますか (テレビ ゲームをオンラインまたはオフラインでプレイする方法と同様に)。私が混乱している本当の理由は、アプリ全体のマニフェストでこれを宣言する必要があるためです (ユーザーがマップ機能を持っていない場合、特定のアクティビティを除外する方法はありますか?)。マップ アクティビティにも GPS が必要ですが、他のアクティビティはそれほど複雑ではないため、このアプリをこれらの高度な機能を備えた電話だけに限定したくありません。

4

2 に答える 2

2

私が混乱している本当の理由は、アプリ全体のマニフェストでこれを宣言する必要があるためです (ユーザーがマップ機能を持っていない場合、特定のアクティビティを除外する方法はありますか?)

要素を入れることができandroid:required="false"ます<uses-library>。次に、実行時に、存在するかどうかを確認しますMapActivity。存在する場合は、Google Maps SDK アドオンがあり、MapActivityサブクラスを起動できます。MapActivity存在しない場合は、別のことを行います。

これを示すサンプル プロジェクトを次に示します: https://github.com/commonsguy/cw-omnibus/tree/master/Maps/NooYawkMapless

マニフェストには次のものがあります。

<uses-library android:name="com.google.android.maps" android:required="false" />

ランチャーアクティビティは次のとおりです。

package com.commonsware.android.maps;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class MapDetector extends Activity {
  @Override
  public void onCreate(Bundle instanceState) {
    super.onCreate(instanceState);

    try {
      Class.forName("com.google.android.maps.MapActivity");
      startActivity(new Intent(this, NooYawk.class));
    }
    catch (Exception e) {
      Toast
            .makeText(this,
                       "Google Maps are not available -- sorry!",
                       Toast.LENGTH_LONG)
            .show();
    }

    finish();
  }
}
于 2012-09-19T16:49:41.650 に答える
1

はい、短い答えです。ハンドラーが特定のインテント (Google マップなど) で使用できるかどうかを調べ、そうでない場合はその画面を開くボタンを無効にすることができます。

以前にこれに使用したコードを見つけようとします...

編集:

private boolean isCallable(Intent intent) {  
    List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);  
    return list.size() > 0;  
}
于 2012-09-19T16:09:40.033 に答える