我有一个Google Plus
页
https://plus.google.com/u/0/b/101839105638971401281/101839105638971401281/posts
和Android应用程序。 我想在我的应用程序打开该网页。 我不想打开浏览器!
这将打开浏览器:
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")));
有了这个解决方案,用户可以选择谷歌加APP或打开浏览器。 如果选择APP,没有崩溃。
如果用户已经安装了Google+应用,你可以这样做:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://plus.google.com/101839105638971401281/posts")));
注意URI语法,而且它不包含/b/id/
。
你必须首先检查用户已经有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,你可以用同样的方式 ,
对于Twitter的 ,
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);
}
}
/**
* 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;
}
什么是堆栈跟踪透露何时崩溃?
另外我不知道这是否会有所作为,但有在ID一个错字。 你写了:
intent.putExtra("customAppUri", "10183910563897140128");
但原本ID为101839105638971401281
。 你在最后离开的1。
为什么不只是Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
。 Android操作系统的查询,可以处理一个特定的URI的所有应用。 Google+中,作为一个应用程序,被编程为能够处理您所请求的URI。 因此,它会显示为一个选择器(或者只是去到它,如果用户已经选择了Google+应用是默认了对该URI的选项。
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)));
}
}