如何以编程方式启动特定应用程序?

mbw*_*asi 36 android

我想启动一个特定的应用程序.

我知道如何做Intents但我想避免选择菜单,如果有多个应用程序可以处理意图,我想直接去特定的应用程序.希望这是有道理的.

Car*_*rni 59

您应该使用包管理器的功能.

Context ctx=this; // or you can replace **'this'** with your **ActivityName.this**
try {
Intent i = ctx.getPackageManager().getLaunchIntentForPackage("com.twidroid.SendTweet");
ctx.startActivity(i);
} catch (NameNotFoundException e) {
    // TODO Auto-generated catch block
}
Run Code Online (Sandbox Code Playgroud)

  • 它是一个[Android Context对象](http://developer.android.com/reference/android/content/Context.html),例如一个Activity或getApplicationContext()的返回值. (3认同)
  • 什么是ctx?对象或关键字? (2认同)
  • 不完全正确。它适用于 ContextWrapper 的所有后代。其他重要的示例是应用程序类和服务类。不管怎样,在视图上你可以使用 getContext(),在片段中你可以使用 getActivity()。通常获取有效的 Context 对象是没有问题的......这就是为什么我没有在原来的答案中明确定义它。 (2认同)

ste*_*ter 28

您可以直接使用包名/类,例如创建一个新的意图来调用twidroid程序,您将使用以下链接文本:

 Intent intent = new Intent("com.twidroid.SendTweet");
Run Code Online (Sandbox Code Playgroud)

您可能希望在未安装应用程序时为ActivityNotFoundException设置try/catch.

  • 如果发生这种情况,您可以抛出异常并在GooglePlay上打开应用程序.;) (6认同)

Bha*_*eja 9

Intent intent = new Intent();    
intent.setClassName("package.name", "package.name.LauncherActivityName");
startActivityForResult(intent,REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)


Fab*_*ssi 8

从 SDK 30 (Android 11) 开始,您需要添加到清单中:

<queries>
    <package android:name="com.app.you.need" />
</queries>
Run Code Online (Sandbox Code Playgroud)

然后是这个:

Intent intent = getApplicationContext().getPackageManager().getLaunchIntentForPackage("com.app.you.need");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)


Jor*_*sys 5

我用:

  try {
       Intent intent = new Intent();    
       intent.setClassName("package.name", "<your_package_name>");
       startActivity(intent);
    } catch (NameNotFoundException e) {
       Log.e(TAG, e.getMessage());
    }
Run Code Online (Sandbox Code Playgroud)

但是就像卡米(Cami)所建议的那样,它也可以工作:

try {
    Intent i = ctx.getPackageManager().getLaunchIntentForPackage("com.twidroid.SendTweet");
    ctx.startActivity(i);
} catch (NameNotFoundException e) {
     Log.e(TAG, e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)