我想启动一个特定的应用程序。
我知道如何做Intents但我想避免选择菜单如果有多个应用程序可以处理意图,我想直接转到特定的应用程序。希望这是有道理的。
答案 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)
=&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)
使用Intent和ComponentName来启动应用
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");