2012-03-14 13 views
1

を共有するには、Intent.ACTION_SENDをリストすることが可能ですか? 誰かがFacebook上で共有しているのかTwitterでTwitterでつぶやくのかを知る必要があるということです。アンドロイド -

+0

あなたは実装したい正確に何? –

+0

ユーザーのFacebookの壁に投稿するために使用していた「共有」ボタンがあり、ユーザーが実際に共有しているかボタンを押して終了したかを知るDialogListenerがあります。 TwitterやSMSだけでも共有したいと思っていますが、ユーザーが本当に自分のポイントを増やすかどうかを知る必要があります。 – goodm

答えて

2

はたぶん、あなたは、より完全な答えを望んでいた、私は手遅れ年だが、うまくいけば、それはまだ便利です:)

だからここに複数のインテントを処理する際の可能な解決策はあります...

意思の

1)あなたが結果を知りたい(例えば大成功または失敗)?

ただ、次の行使って意思を開始します。

startActivityForResult(intent, 1); //instead of startActivity(intent) 

をそしてonActivityResultオーバーライドすることによってrequestCodeとのresultCodeを検索:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 0) { 
     if(resultCode == Activity.RESULT_OK){ 
      //intent 0 = succesful (Facebook) 
     } else{ 
      //intent 0 = failed or canceled 
     } 
    } else if (requestCode == 1) { 
     if(resultCode == Activity.RESULT_OK){ 
      //intent 1 = succesful (Twitter) 
     } else{ 
      //intent 1 = failed or canceled 
     } 
    } 
} 

2)あなたは意図開かれたが、APPどの知りたいですか?

ドンの信頼内蔵の意思チュー、独自のダイアログを作成し、それぞれの目的に別のrequestCode(一意の整数値、意図を識別するために)を得

例:

new AlertDialog.Builder(this) 
.setTitle("Share with friends!") 
.setSingleChoiceItems(new ArrayAdapter<String>(this, android.R.layout.select_dialog_item, 
    new String[]{"Facebook", "Twitter"}), -1, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       if (which == 0) { 
        StartFacebookShare(); 
       } else if (which == 1) { 
        StartTwitterShare(); 
       } 
       dialog.dismiss(); 
      } 
}).show(); 

private void StartFacebookShare() { 
    String messageUrl = "http://www.stackoverflow.com"; //the url you want to share 
    try { 
     Intent intent = new Intent("android.intent.category.SEND"); 
     intent.putExtra(Intent.EXTRA_TEXT, messageUrl); 
     intent.setClassName("com.facebook.katana", "com.facebook.katana.ShareLinkActivity"); 
     startActivityForResult(intent, 0); 
    } catch (Exception e) { 
     Intent intent = new Intent(); 
     intent.setAction(Intent.ACTION_VIEW); 
     intent.setData(Uri.parse("https://m.facebook.com/sharer.php?u=" + messageUrl)); 
     startActivityForResult(intent, 1); 
    } 
} 
private void StartTwitterShare() { 
    String messageUrl= "http://www.stackoverflow.com"; //the string you want to tweet 
    try { 
     //see edit below for more info on API 
     Twitter twitter = TwitterFactory.getSingleton(); 
     Status status = twitter.updateStatus(messageUrl); 
    } catch (Exception e) { 
     Intent intent = new Intent(); 
     intent.setAction(Intent.ACTION_VIEW); 
     intent.setData(Uri.parse("https://twitter.com/intent/tweet?text=" + messageUrl)); 
     startActivityForResult(intent, 1); 
    } 
} 

いくつかの有用な情報をhere見つけることができるとhereは、多分hereを検索したり、あなたが私のコードのための提案があればコメント(I常にフィードバックのような^^)またはあなたが何かに立ち往生している場合:)

編集:などの意図のようないくつかのマイナーな変更と常にウェブ意図とキャッチボールを追加しました(現在は失敗することはできません、右?) やTwitterの部分は私がjarを使用(あなたの「LIBS」フォルダに配置します)そして必要TwitterのAPIはregistrationconfigurationを以下、幸運!

+1

コードの素敵な部分。今は必要ありませんが、将来的には必要になるでしょう!ありがとう – goodm

+0

文書化されサポートされているAPIに含まれていないサードパーティのアプリから、クラス名とパッケージ名をハードコードしないでください。 @CommonsWare Agreed。 – CommonsWare

+0

編集を参照してください、これはあなたが念頭に置いていた解決策ですか? –

2

いいえ、あなたは人が実際にあなたがACTION_SEND経由にリンクアプリケーションには何もないかどうかを決定する方法がありません。これはWebに非常によく似ています.Webサイトでは、URLを使用してリンクする人物が何かをしているかどうかはわかりません。受け入れられた1が短めだったので