2017-09-15 75 views
0

我有两个应用程序。第一个应用程序有一个活动,我想从第二个应用程序启动活动。我使用下面的代码:从第一个应用程序没有图标的第二个应用程序的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); 

此代码成功地消除了启动器图标,但随后的活动是无法从第二个应用程序启动活动。

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

回答

0

当您像您一样禁用component时,该component无法以任何方式启动。但有趣的是,第二个应用程序的其他组件(非禁用活动)仍然可以启动。

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

从您的第一个应用程序,请致电intentMainActivity。禁用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

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

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); 
相关问题