Android 为什么是;使用“完成操作”;为了这个目的突然出现?

Android 为什么是;使用“完成操作”;为了这个目的突然出现?,android,android-intent,dialog,Android,Android Intent,Dialog,我只是将一些社交网络链接到我的应用程序作为初步测试,使用相同的代码,我得到的结果在Facebook、Instagram和Twitter上是不同的 当我单击Facebook或Twitter时,它会在安装时自动打开应用程序,在未安装时使用浏览器。然而,Instagram并非如此。完整的动作使用对话框弹出,这不是我想发生的事情 protected void LaunchInstagram() { String InstagramUsername = "USERNAME"; String

我只是将一些社交网络链接到我的应用程序作为初步测试,使用相同的代码,我得到的结果在Facebook、Instagram和Twitter上是不同的

当我单击Facebook或Twitter时,它会在安装时自动打开应用程序,在未安装时使用浏览器。然而,Instagram并非如此。完整的动作使用对话框弹出,这不是我想发生的事情

protected void LaunchInstagram() {
    String InstagramUsername = "USERNAME";
    String LaunchInstagram = "http://instagram.com/_u/" + InstagramUsername;
    String InstagramURL = "https://instagram.com/" + InstagramUsername;
    try {
        this.getPackageManager().getPackageInfo("com.instagram.android", 0);
        Uri Uri = Uri.parse(LaunchInstagram);
        startActivity(new Intent(Intent.ACTION_VIEW, Uri));
    } catch (PackageManager.NameNotFoundException InstagramAppNotFoundOpenBrowser) {
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(InstagramURL)));
    }
}
您正在使用

字符串InstagramURL=“”+InstagramUsername

因此,您尝试启动的每个意图都将打开一个选择器,因为这是一个URL

每一个支持URL的应用程序,比如浏览器等,都会尝试处理这个问题

编辑1:

试着这样做:

public static boolean openApp(Context context, String packageName) {
    PackageManager manager = context.getPackageManager();
    try {
        Intent i = manager.getLaunchIntentForPackage(packageName);
        if (i == null) {
            return false;
            //throw new PackageManager.NameNotFoundException();
        }
        i.addCategory(Intent.CATEGORY_LAUNCHER);
        context.startActivity(i);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}
        Uri uri = Uri.parse("http://instagram.com/_u/USERNAME");
    Intent insta = new Intent(Intent.ACTION_VIEW, uri);

    insta.setPackage("com.instagram.android");
startActivity(insta);
我不确定这是否有助于您在应用程序上打开特定的用户页面

编辑2:

试着这样做:

public static boolean openApp(Context context, String packageName) {
    PackageManager manager = context.getPackageManager();
    try {
        Intent i = manager.getLaunchIntentForPackage(packageName);
        if (i == null) {
            return false;
            //throw new PackageManager.NameNotFoundException();
        }
        i.addCategory(Intent.CATEGORY_LAUNCHER);
        context.startActivity(i);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}
        Uri uri = Uri.parse("http://instagram.com/_u/USERNAME");
    Intent insta = new Intent(Intent.ACTION_VIEW, uri);

    insta.setPackage("com.instagram.android");
startActivity(insta);

我现在明白了,有没有办法编辑LaunchInstagram字符串,这样如果直接安装,try块将重定向到Instagram应用程序?