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

时间:2010-07-27 12:08:43

标签: android

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

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

10 个答案:

答案 0 :(得分:51)

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

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
}

答案 1 :(得分:25)

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

 Intent intent = new Intent("com.twidroid.SendTweet");

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

答案 2 :(得分:9)

Intent intent = new Intent();    
intent.setClassName("package.name", "package.name.LauncherActivityName");
startActivityForResult(intent,REQUEST_CODE);

答案 3 :(得分:4)

您正在调用的活动不仅应出现在Manifest中,而且还应出现在CALLING包的Manifest中。 - 别忘了!

答案 4 :(得分:4)

我用:

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

但是像Cami建议的那样也会起作用:

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

答案 5 :(得分:2)

oncreate 方法调用中的

=&gt; openApp(); 方法

private void openApp() {
    String packageName = "com.google.android.gm";
    if (isAppInstalled(activity, packageName))
        startActivity(getPackageManager().getLaunchIntentForPackage(packageName));
    else Toast.makeText(activity, "App not installed", Toast.LENGTH_SHORT).show();
}

public static boolean isAppInstalled(Activity activity, String packageName) {
    PackageManager pm = activity.getPackageManager();
    try {
        pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
    }
    return false;
}

答案 6 :(得分:1)

假设您要从应用中打开Wonder Clock

网址:https://play.google.com/store/apps/details?id=ganesha.diva.app.wonderclock.free&hl=en_US

ID字段/包名称是我们感兴趣的 = ganesha.diva.app.wonderclock.free

程序包管理器会跟踪设备上安装的应用程序并维护程序包列表。因此,任何与设备上安装的应用程序相关的内容都应该咨询软件包管理器。

捆绑包ID或包名称在全球范围内是唯一的,因此可用于检查设备上是否存在包/应用程序。

从您的应用中打开Wonder Clock

  • 询问包管理器,了解给定包名称的启动器活动

    Intent intent = context.getPackageManager().getLaunchIntentForPackage("ganesha.diva.app.wonderclock.free");

  • 检查启动器活动是否存在 设备上未安装if(intent != null) continue...其他应用,请将用户带到网址
  • 将所需的标志添加到意图中 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  • 开始活动 startActivity(intent);

答案 7 :(得分:0)

我的解决方案是

String packageName = "Your package name";

    Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);

    if(intent == null) {
        try {
            // if play store installed, open play store, else open browser 
            intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName));
        } catch (Exception e) {
            intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName));
        }
    } 
   startActivity(intent);

答案 8 :(得分:0)

使用IntentComponentName来启动应用

ComponentName cName = new ComponentName("packageName","packagename.yourMainActivity");
Intent intent = new Intent("android.intent.action.MAIN");
intent.setComponent(cName);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);

答案 9 :(得分:0)

我要做的是打开应用程序

private void _LaunchApp(final String _Pack) {
    Intent launchi = new Intent(Intent.ACTION_VIEW);
    launchi.setData(Uri.parse("android-app://".concat(_Pack)));
    startActivity(launchi);
}

和用法

_LaunchApp("your.package.here");