我有两个应用程序。第一个应用程序有一个活动,我想从第二个应用程序启动一个活动。我使用以下代码:
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);
此代码成功删除了启动器图标,但是我的第一个应用程序中的活动无法从第二个应用程序启动活动。
在这方面,任何人都可以帮助我吗?我想从另一个应用程序的活动中启动没有图标的应用程序的活动。
答案 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);