我们如何找到启动其他应用程序的信息?

时间:2012-04-17 02:23:31

标签: android android-intent action manifest intentfilter

我需要允许用户绘制/绘制/绘制一些东西。已经有很多应用程序(如Skitch,我将以此为例)完成此任务。所以我不想重新发明轮子 在Android中,理论上,我们可以通过意图启动其他活动。这有点像Unix中的“管道” 问题是,我不知道如何获取启动Skitch的信息 要在我的应用程序中集成Skitch,我需要知道它支持的Action,返回完成后的意图(如果有的话)。

我在设备中安装了Skitch,photoshop和许多其他触摸绘图应用,但此代码不起作用:

Uri data = Uri.fromFile(file);
Intent i = new Intent(Intent.ACTION_EDIT);
i.setData(data);
i.setType("image/*");                               
startActivityForResult(i, ACTIVITY_DRAW);

我可以通过以下方式从我的应用程序启动Skitch:但显然我无法以这种方式获得任何返回的结果(来自here的代码)。

Intent i = new Intent(Intent.ACTION_MAIN);
PackageManager manager = getPackageManager();
i = manager.getLaunchIntentForPackage("com.evernote.skitch");
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);

我的问题:是否有标准方法可以找到启动第三方应用的信息? this site是分享/获取此类信息的唯一方式吗? 或者如果您对我的问题有任何建议,请帮帮我 谢谢!

2 个答案:

答案 0 :(得分:3)

您可能已经知道如何从应用中调用另一个应用活动..这样 Mentioned Here.

Intent intent = new Intent(Intent.ACTION_RUN); 
intent.setComponent(new ComponentName("<packet name>", "<class name>")); 
List list = packageManager.queryIntentActivities(intent, packageManager.COMPONENT_ENABLED_STATE_DEFAULT); 

if(list.size() > 0) 
{ 
 Log.i("Log", "Have application" + list.size()); 
 startActivity(intent); 
} 
else 
{ 
    Log.i("Log", "None application"); 
} 

您的所有要求主要是两件事来调用任何活动

1)该活动的包名称  2)活动类名称

这两种信息只有在开源或免费使用时才可用..如Zxing,谷歌地图应用程序。

还有另一种启动应用程序活动的方法,如

Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + numberField.getText())); // set the Uri
startActivity(intent);

这种使用方式需要知道要调用的Activity的正确Action和要传递的Correct参数。

同样,这些信息只有在开源或免费使用时才可用..比如Facebook和Gmail应用程序可以共享和发布消息。

因此,如果您正在搜索可以告诉您在设备中调用任何特定商业应用程序需要传递的内容,那么您将无法直接找到它。

答案 1 :(得分:0)

这是一个老问题,但也许它可以帮助有人知道索尼的AppXplore应用程序(免费)显示设备上安装的每个应用程序的活动的包和名称,因此您最终可以使用它们来执行明确的Intents。 / p>