我可以构建适用于具有和没有谷歌地图功能的手机的应用程序吗(允许用户使用地图和其他人排除此功能)



我正在构建一个具有多种有用功能的应用程序。一项活动使用谷歌地图。我是否可以使用户可以根据需要使用此功能,但将其从无法使用它的旧手机中排除(类似于在线或离线玩视频游戏的方式)? 我感到困惑的真正原因是因为我必须在整个应用程序的清单中声明这一点(如果用户没有地图功能,我有没有办法排除某个活动? 我也将需要GPS进行地图活动,但我不想将此应用程序限制为仅具有这些高级功能的手机,因为其他活动要简单得多。

感到困惑的真正原因是因为我必须在整个应用程序的清单中声明这一点(如果用户没有地图功能,我有没有办法排除某个活动?

您可以将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();
  }
}

是的,这是简短的答案。 您可以检查处理程序是否可用于特定意图(例如谷歌地图),如果没有,则禁用将打开该屏幕的按钮。

我尝试找到我以前用于此的代码...

编辑:

private boolean isCallable(Intent intent) {  
    List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);  
    return list.size() > 0;  
}

相关内容

最新更新