1

我正在构建一个具有多种有用功能的应用程序。一项活动使用谷歌地图。我是否可以让用户根据需要使用此功能,但将其从无法使用的旧手机中排除(类似于在线或离线玩视频游戏的方式)?我感到困惑的真正原因是因为我必须在整个应用程序的清单中声明这一点(如果用户没有地图功能,我有没有办法排除某个活动?)。我也将需要 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

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

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

编辑:

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 回答