21

我有一个Google Plus页面

https://plus.google.com/u/0/b/101839105638971401281/101839105638971401281/posts

和一个安卓应用程序。我想在我的应用程序中打开此页面。我不想打开浏览器!

这将打开浏览器:

URL="https://plus.google.com/b/101839105638971401281/101839105638971401281/posts";
uri = Uri.parse(URL);
it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);

这崩溃了:

 Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setClassName("com.google.android.apps.plus",             "com.google.android.apps.plus.phone.UrlGatewayActivity");

intent.putExtra("customAppUri", "10183910563897140128");
startActivity(intent);

提前致谢!

[解决了]

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://plus.google.com/101839105638971401281/posts")));

使用此解决方案,用户可以选择 Google Plus APP 或打开浏览器。如果选择了APP,则不会崩溃。

4

6 回答 6

25

如果用户安装了 Google+ 应用,您可以这样做:

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://plus.google.com/101839105638971401281/posts")));

请注意 URI 的语法,它不包含/b/id/.

于 2012-08-08T16:44:37.800 回答
21

您必须首先检查用户是否已经在他/她的手机中安装了 G+ 应用程序?如果是,那么我们可以通过特定意图启动它,或者我们可以使用浏览器重定向到特定页面。

这是这种流程中的一种方法,

public void openGPlus(String profile) {
    try {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setClassName("com.google.android.apps.plus",
          "com.google.android.apps.plus.phone.UrlGatewayActivity");
        intent.putExtra("customAppUri", profile);
        startActivity(intent);
    } catch(ActivityNotFoundException e) {
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://plus.google.com/"+profile+"/posts")));
    }
}

现在你可以简单地调用这个方法,

//117004778634926368759 is my google plus id
openGPlus("117004778634926368759");

扩展答案twitter 和 facebook 你可以使用相同的方式

对于推特

public void openTwtr(String twtrName) {
        try {
           startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("twitter://user?screen_name=" + twtrName)));
        } catch (ActivityNotFoundException e) {
           startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("https://twitter.com/#!/" + twtrName)));
        }
}

而对于 Facebook

public void openFB(String facebookId) {
    try{
        String facebookScheme = "fb://profile/" + facebookId;
        Intent facebookIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(facebookScheme));
        startActivity(facebookIntent);
    } catch (ActivityNotFoundException e) {
        Intent facebookIntent = new Intent(Intent.ACTION_VIEW,Uri.parse("https://www.facebook.com/profile.php?id="+facebookId));
        startActivity(facebookIntent);
    }
}
于 2014-01-23T10:11:43.040 回答
3
/**
 * Intent to open the official Google+ app to the user's profile. If the Google+ app is not
 * installed then the Web Browser will be used.
 * 
 * </br></br>Example usage:</br>
 * <code>newGooglePlusIntent(context.getPackageManager(), "https://plus.google.com/+JaredRummler");</code>
 * 
 * @param pm
 *            The {@link PackageManager}.
 * @param url
 *            The URL to the user's Google+ profile.
 * @return The intent to open the Google+ app to the user's profile.
 */
public static Intent newGooglePlusIntent(PackageManager pm, String url) {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    try {
        if (pm.getPackageInfo("com.google.android.apps.plus", 0) != null) {
            intent.setPackage("com.google.android.apps.plus");
        }
    } catch (NameNotFoundException e) {
    }
    return intent;
}
于 2014-10-04T06:00:53.110 回答
1

堆栈跟踪在崩溃时会说什么?

另外我不确定这是否会有所作为,但 ID 中有错字。你写了:

intent.putExtra("customAppUri", "10183910563897140128");

但最初的 ID 是101839105638971401281. 你最后离开了 1 。

于 2012-08-08T16:44:24.067 回答
0

为什么不只是Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 。Android 操作系统会查询所有可以处理特定 Uri 的应用程序。Google+ 作为一个应用程序,被编程为能够处理您请求的 Uri。所以它会在选择器中显示为一个选项(或者如果用户已经选择了 Google+ 应用程序作为该 Uri 的默认设置,则直接转到它。

于 2015-03-31T03:59:18.403 回答
0
public void openTwitter(String twitterName) {
    try {
       startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("twitter://user?screen_name=" + twitterName)));
    } catch (ActivityNotFoundException e) {
       startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("https://twitter.com/#!/" + twitterName)));
    }
}
于 2018-08-23T16:58:06.637 回答