web-dev-qa-db-ja.com

インテントでGooglePlusページを開くAndroid

私は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")));

このソリューションを使用すると、ユーザーはGoogle Plus APPを選択するか、ブラウザを開くことができます。 APPを選択した場合、クラッシュは発生しません。

21
benoffi7

ユーザーがGoogle+アプリをインストールしている場合は、次の操作を実行できます。

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

URIの構文に注意してください。また、URIには/b/id/が含まれていません。

25
Chirag Shah

まず、ユーザーが自分の携帯電話にG +アプリを既に持っているかどうかを確認する必要がありますか?はいの場合、特定の目的で開始するか、特定のページへのブラウザーリダイレクトを使用できます。

このようなフローの1つの方法は次のとおりです。

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);
    }
}
21
Hardik Thaker
/**
 * 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;
}
3
Jared Rummler

スタックトレースは、クラッシュしたときに何と言いますか?

また、これが違いを生むかどうかはわかりませんが、IDにタイプミスがあります。あなたが書いた:

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

もともとIDは101839105638971401281。あなたは最後に1をやめました。

1
Ken Fehling
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)));
    }
}
0
Ahmed Sayed

なぜIntent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));だけではないのですか。 Android OSは、特定のURIを処理できるすべてのアプリケーションにクエリを実行します。Google+は、アプリとして、リクエストしているURIを処理できるようにプログラムされています。したがって、オプションとして表示されます。セレクター(または、ユーザーがそのURIのデフォルトとしてGoogle+アプリを既に選択している場合はそのアプリに移動します。

0
astryk