从第一个应用程序没有图标的第二个应用程序的Android开始活动
我有两个应用程序。第一个应用程序有一个活动,我想从第二个应用程序启动活动。我使用下面的代码:从第一个应用程序没有图标的第二个应用程序的Android开始活动
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);
此代码成功地消除了启动器图标,但随后的活动是无法从第二个应用程序启动活动。
任何人都可以在这方面帮助我吗?我想从另一个应用程序的活动启动没有图标的应用程序的活动。
当您像您一样禁用component
时,该component
无法以任何方式启动。但有趣的是,第二个应用程序的其他组件(非禁用活动)仍然可以启动。
因此,您可以在第二个应用程序中为您的目的创建MainActivity
的别名。我们称别名为MainActivityAlias
。
从您的第一个应用程序,请致电intent
MainActivity
。禁用component
的代码将被执行并且不会打开。但是,该图标将消失,因为此component
已禁用,并且与此component
(即图标)相关的所有内容也都消失了。
现在,请在MainActivityAlias
上拨打intent
,然后在第一个应用程序的之上。这只是MainActivity
的副本,但它没有任何禁用代码,因此它已启用并可启动。
一些旁注:
1)这两项活动都应该有一个android.intent.action.MAIN
<intent-filter>
。
2)您的MainActivity
应该是发射器activity
,因此在manifest
中应该有android.intent.category.LAUNCHER
。
3)里面MainActivity
,你必须检查来电的地方。如果调用来自第一个应用程序,则执行代码以禁用您在问题中提到的图标。如果通话来自启动器图标,请使用意向打开MainActivityAlias
。你可以知道电话来自哪里,如this。
注 - 这只是一个想法。我没有测试过它。
如果您不希望第二个应用具有应用图标,只需在第二个应用中删除<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);