不允许从其他应用程序打开自己的应用程序

时间:2013-10-09 08:57:56

标签: android

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

我想阻止这种(Open another application from your own (intent))类型的访问

修改

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

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”,并添加了对lauching活动的权限。由于这个原因,它阻止了第三方应用程序启动我的应用程序,但Android OS启动程序也无法启动应用程序。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

答案 2 :(得分: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上只能存在一个具有特定包名称的应用。
  • 如果用户尝试安装设备上已存在包名称的应用,则安装将失败或将覆盖以前安装的应用。