web-dev-qa-db-ja.com

新しいハングアウトのインテントからGoogleハングアウトを開始するAndroid app

AndroidのインテントからGoogleハングアウトを開始することに関して、ここで以前の議論があります: AndroidでGoogleハングアウトを開始する

Androidインテント付き)でGoogleハングアウトを開始するにはどうすればよいですか?

結論は、これは不可能であるということでした。ここでリクエストされた拡張機能です: https://code.google.com/p/google-plus-platform/issues/detail?id=385

ただし、昨日、Googleは新しい一連のインテントを備えた新しいハングアウトアプリをリリースしました。インテントを介してハングアウトを開始することは可能になりましたか?

action=Android.intent.action.VIEWdata=content://plus.google.com/hangoutsで部分的に成功しました。

ただし、電話をかけたい相手の名前またはID、つまり受信者の名前を渡したいのですが。私はこれを理解することはできません。

新しいブラウザベースのハングアウトアプリは、次のようなURLでハングアウトを開始します。

https://plus.google.com/hangouts/_/CONVERSATION/[26-character ID]?hl=en_US&hscid=[19-digit ID]&hpe=[14-character value]&hpn=[Google+ Name of Recipient]&hnc=0&hs=41.

ハングアウトを開始するためにこれらのパラメータのすべてが必要なわけではないと思いますが、インテントで受信者名を渡す方法を解読することはできません。

何かご意見は?ありがとうございました。

21
user2388372

ですから、私は主にタスカーを使用して意図を実行しようとしていたので、これが他の誰かに役立つかどうかはわかりません。 [Google +]> [設定]> [連絡先]に移動すると、[連絡先を最新の状態に保つ]をオンにすると、Androidでユーザーをクリックしたときに表示されるカードにいくつかの新しいアクションが追加されます。次に、 Intent Intercept を使用して、通過する値を読み取ることができます。これが私が得たものです:

ACTION: Android.intent.action.VIEW
DATA: content://com.Android.contacts/data/5555
TYPE: vnd.Android.cursor.item/vnd.googleplus.profile.comm

FLAGS:
FLAG_ACTIVITY_FORWARD_RESULT
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
FLAG_ACTIVITY_PREVIOUS_IS_TOP

1 ACTIVITIES MATCH THIS INTENT:
Hangouts (com.google.Android.talk - com.google.Android.apps.babel.phone.BabelProfileActionActivity)

上位3つの値を使用して、その連絡先との会話を適切に開くことができました。明らかに、データフィールドの番号は連絡先によって異なります。インテントインターセプトでトリックを使用するか、ルートがある場合は SQLite Debugger のようなものを使用して、連絡先データベースのデータテーブルをクラックして開き、MIMETYPE_ID = 16およびDATA4の行を見つけることができます。 = 10.RAW_CONTACT_IDも何であるかを確認する必要があります。幸運を!

5
Sean

簡単な解決策は、ContactContract.Dataに_idおよびMIMEタイプを照会することです。

ContentResolver resolver = context.getContentResolver();  
cursor = resolver.query(
            ContactsContract.Data.CONTENT_URI,
            null, null, null,
            ContactsContract.Contacts.DISPLAY_NAME);

//Now read data from cursor like 

while (cursor.moveToNext()) {
      long _id = cursor.getLong(cursor.getColumnIndex(ContactsContract.Data._ID));
      String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
      String mimeType = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE));

      Log.d("Data", _id+ " "+ displayName + " " + mimeType );

}

出力は次のようになります

12561 Allen vnd.Android.cursor.item/vnd.googleplus.profile.comm

12562 Allen vnd.Android.cursor.item/vnd.googleplus.profile.comm

12564 Allen vnd.Android.cursor.item/vnd.googleplus.profile

ここで、MIMEタイプがvnd.Android.cursor.item/vnd.googleplus.profile.commである_IdのみをDBまたは他の場所に保存します。

次に、このように連絡先とハングアウトの通話/メッセージを開始します

Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);

// the _ids you save goes here at the end of /data/12562     
     intent.setDataAndType(Uri.parse("content://com.Android.contacts/data/_id"),
                    "vnd.Android.cursor.item/vnd.googleplus.profile.comm");
            intent.setPackage("com.google.Android.talk");

startActivity(intent);

上記のコードを機能させるには、Google +アプリ> [設定]> [連絡先]で[連絡先を最新の状態に保つ]をオンにする必要があります。

2
Adnan Khan

このようにしてみてください

ハングアウトにテキストを共有するために使用する以下のメソッド

/**
 * Initiate the actions encoded in the specified URI.
 */
public void initiateHangOutUri(Context myContext, String textToShare) {

  // Make sure Android client is installed.
  if (!isHangOutClientInstalled(myContext)) {
    goToMarket(myContext);
    return;
  }

  Intent sendIntent = new Intent();
  sendIntent.setAction(Intent.ACTION_SEND);
  sendIntent.putExtra(Intent.EXTRA_TEXT, textToShare);
  sendIntent.setType("text/plain");
  sendIntent.setPackage("com.google.Android.talk");
  context.startActivity(sendIntent);

  return;
}

このデバイスにインストールされているハングアウトを確認するには、以下の方法を使用します

/**
 * Determine whether the HangOut for Android client is installed on this device.
 **/
public boolean isHangOutClientInstalled(Context myContext) {
  final PackageManager packageManager = context.getPackageManager();
    Intent intent = packageManager.getLaunchIntentForPackage("com.google.Android.talk");
    if (intent == null) {
        return false;
    }
    List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
    return list.size() > 0;
}

以下の方法では、HangOutがインストールされていない場合はgotoプレイストアを使用します

public void goToMarket(Context myContext) {
  Uri marketUri = Uri.parse("market://details?id=com.skype.raider");
  Intent myIntent = new Intent(Intent.ACTION_VIEW, marketUri);
  myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  myContext.startActivity(myIntent);

  return;
}
1
Lokesh

ハングアウトは一般的な共有インテントを処理できます。

コードは次のとおりです。

        Intent sendIntent = new Intent(Intent.ACTION_SEND);
        sendIntent.setType("text/plain");
        sendIntent.putExtra(Intent.EXTRA_TEXT, "text to be shared");

        activity.startActivity(sendIntent);
1
AndyW

ねえ、私はあなたがこれを試してみようと思います。

Intent sky = new Intent("Android.intent.action.VIEW", Uri.parse("https://talkgadget.google.com/hangouts/extras/talk.google.com/myhangout"));
startActivity(sky);

ハングアウトのURLを指定する必要がありますが、残念ながらgoogleは名前付きハングアウトを一時停止したため、このURLは毎回変更されます。

0
Jatin Patel