2012-03-14 66 views
1

是否可以列出Intent.ACTION_SEND? 我的意思是我需要知道是否有人在Facebook上分享,或者通過action_send在Twitter上發佈推文。Android - 共享

+0

你想要實現什麼? – 2012-03-14 12:32:47

+0

我有「共享」按鈕用於在用戶的Facebook牆上發佈,並且我有DialogListener知道用戶是否真的共享或只是按下按鈕並退出。我想有可能分享到Twitter或短信,但我需要知道用戶是否真的分享以增加他的分數。 – goodm 2012-03-14 12:36:01

回答

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)你想知道哪些應用程式的意圖打開?

不要信任內置的意向選擇器,使你自己的對話框,並給每個意向另一個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); 
    } 
} 

一些有用的信息,可以發現herehere,也許搜索here或者如果你有我的代碼的建議發表評論(我總是喜歡反饋^^)或者如果你堅持的東西:)

編輯:一些小的變化,如意圖,並總是添加一個網絡意圖(現在不能失敗,對吧?) 而對於Twitter部分我使用jar(將它放在你的'libs'文件夾中)以及需要下列registrationconfiguration的Twitter API,祝你好運!

+1

好的一段代碼。現在不需要它,但我肯定將來需要它!謝謝 – goodm 2013-04-27 19:32:40

+0

切勿將第三方應用程序中的類和包名稱硬編碼,這些應用程序不屬於某些記錄和支持的API的一部分。 – CommonsWare 2013-04-27 19:41:50

+0

@CommonsWare同意。看到編輯,這是否有點你想的解決方案? – 2013-04-29 09:01:46

2

不,您無法確定某個人是否在通過ACTION_SEND鏈接到的應用程序中確實執行了任何操作。這與Web非常相似,您不知道某個人是否在通過URL鏈接到的網站上執行任何操作。