-1

我已经看到了一些其他应用程序可以通过包名称启动我的应用程序的示例。由于安全原因,我想阻止其他应用程序的这种访问。

我想防止这种(从您自己的(意图)打开另一个应用程序)类型的访问

编辑

例如,如果第三方应用程序知道我的应用程序的包名称,他们可以像这样从他们的应用程序启动我的应用程序,

Intent i;
PackageManager manager = getPackageManager();
try {
    i = manager.getLaunchIntentForPackage("app package name");
    if (i == null)
        throw new PackageManager.NameNotFoundException();
    i.addCategory(Intent.CATEGORY_LAUNCHER);
    startActivity(i);
} catch (PackageManager.NameNotFoundException e) {   
}

现在为了防止这种情况,我在启动活动中添加了 export = "false" 并添加了启动活动的权限。现在正因为如此,它阻止了第三方应用程序启动我的应用程序,但 android OS 启动器也无法启动应用程序。

4

3 回答 3

1

我想如果您不在 Android 清单中提供启动意图,其他应用程序(包括您的主屏幕)将无法启动您的应用程序。

于 2013-10-09T09:06:46.650 回答
0

我希望通过比较包名称的以下解决方案将帮助您保护您的活动以由其他应用程序启动。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ComponentName componentName = this.getCallingActivity();
    if(componentName == null) {
        finish();
    } else if("<intended package name>".equals(componentName.getPackageName())) {
         finish();
        } else {
            String data = getIntent().getDataString();
            ...
        }
    }
}

上述解决方案基于以下假设:

  • Google Play 上只能存在一个具有特定包名称的应用。
  • 如果用户尝试安装其包名称已存在于设备上的应用程序,则安装将失败或将覆盖先前安装的应用程序。
于 2018-05-25T01:53:10.097 回答