从第一个应用程序没有图标的第二个应用的Android启动活动

时间:2017-09-15 13:06:06

标签: android android-activity android-launcher

我有两个应用程序。第一个应用程序有一个活动,我想从第二个应用程序启动一个活动。我使用以下代码:

Intent launchIntent = m_context.getPackageManager().getLaunchIntentForPackage(m_packageName);
    if (launchIntent != null) {
        m_context.startActivity(launchIntent);
}

此代码可以很好地从第二个应用程序启动活动,但我希望第二个应用程序没有任何图标。我在第二个应用程序的MainActivity中使用以下代码来删除图标:

PackageManager p = getPackageManager();
//Removing app icon
ComponentName componentName = new ComponentName(this, com.tools.html2pdf.MainActivity.class);
p.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

此代码成功删除了启动器图标,但是我的第一个应用程序中的活动无法从第二个应用程序启动活动。

在这方面,任何人都可以帮助我吗?我想从另一个应用程序的活动中启动没有图标的应用程序的活动。

2 个答案:

答案 0 :(得分:0)

如果您已完成component的停用,则component无法以任何方式启动。但有趣的是,您的第二个应用程序的其他组件(非禁用活动)仍然可以启动。

因此,您可以在第二个应用程序中创建MainActivity的别名,该别名将用于您的目的。我们将别名称为MainActivityAlias

在第一次申请时,请致电intent上的MainActivity。将执行禁用component的代码,不会打开任何内容。但是,图标将会消失,因为此component已被禁用,与此component相关的所有内容(即图标)也已消失。

现在,在第一个应用程序中intent之后的MainActivityAlias上调用intent。这只是MainActivity的副本,但它没有任何禁用代码,因此启用并可启动。

一些附注:

1)这两项活动都应该<intent-filter> android.intent.action.MAIN

2)您的MainActivity应该是启动器activity,因此android.intent.category.LAUNCHER中应该manifest

3)在MainActivity内,您必须检查来电的来源。如果调用来自第一个应用程序,则执行代码以禁用您在问题中提到的图标。如果呼叫来自启动器图标,则使用意图打开MainActivityAlias。您可以知道来电的来源,例如this

注意 - 这只是一个想法。我还没有测试过。

答案 1 :(得分:0)

如果您不希望第二个应用拥有应用图标,只需删除第二个应用中根<intent-filter>的ACTION = MAIN和CATEGORY = LAUNCHER的Activity即可。安装应用程序后,如果没有<intent-filter>的ACTION = MAIN和CATEGORY = LAUNCHER,则不会显示应用程序图标。

您的应用仍然可以启动第二个应用,但不能使用您所描述的方法,因为Android不知道哪个是“启动”Activity。假设您知道要在第二个应用中启动的Activity的包和类名,可以像这样启动它:

Intent launchIntent = new Intent();
launchIntent.setClassName("second.package.name", "fully.qualified.class.name.of.MainActivity");
// add and Intent flags if necessary here
launchIntent.addFlags(Intent.FLAG_ACTIVITY_...);
startActivity(launchIntent);