2016-03-02 67 views
3

我試圖通過直接分享從我的應用程序共享鏈接。共享對話框必須與下面的圖片一樣,使用來自消息傳遞應用程序的最常用聯繫人,例如WhatsApp聯繫人。Android直接共享

Goal which I am trying to achieve

這是Intent結構,我使用了共享鏈接:

Intent shareIntent = ShareCompat.IntentBuilder 
         .from(getActivity()) 
         .setType("text/plain") 
         .setText(sTitle+ "\n" + urlPost) 
         .getIntent(); 
       if (shareIntent.resolveActivity(
         getActivity().getPackageManager()) != null) 
        startActivity(shareIntent); 

而這正是我的應用程序顯示:

what my app shows

任何想法如何實現這一目標?

+0

恩,如果你是一個共享鏈接的人,你不會實現'ChooserTargetService'。WhatsApp,聯繫人應用程序和其他應用程序實現'ChooserTargetService',如果他們願意的話。 – CommonsWare

+0

哦,也許我對'ChooserTargetService'有點困惑,但是,當我共享像文本一樣的鏈接時,爲什麼我的應用程序中的共享對話框不顯示聯繫人? – cherif

+1

也許WhatsApp沒有實現一個'ChooserTargetService',或者他們沒有爲你的請求使用任何'Intent'結構。 – CommonsWare

回答

3

您應該使用的.createChooserIntent()代替.getIntent()

0

像下面這段代碼,你可以使用Intent.createChooser

  Intent sharingIntent = new Intent(Intent.ACTION_SEND); 
      Uri screenshotUri = Uri.parse("file://" + filePath); 

      sharingIntent.setType("image/png"); 
      sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri); 
      startActivity(Intent.createChooser(sharingIntent, "Share image using")); 
0

您應該使用.createChooserIntent(),而不是.getIntent()

文檔:這使用ACTION_CHOOSER意圖,它顯示

活動選擇器,允許用戶在繼續之前選擇他們想要的。這可以被用來作爲替代的是由系統當您嘗試啓動與多個可能匹配的活動中顯示的標準活動選擇器,與這些行爲差異:

  • 您可以指定將出現在標題在活動選擇器中。
  • 用戶沒有選擇將其中一個匹配活動作爲首選活動,並且即使其中一個目前被標記爲 首選活動,也始終顯示所有可能的活動 。

當用戶自然期望 選擇活動以繼續時,應使用此操作。例如,如果不使用 ,那麼當用戶點擊「mailto:」鏈接時。他們自然會希望直接去他們的郵件應用程序,所以startActivity()應該直接調用 :它會啓動當前的首選應用程序,或者 建立一個對話框,允許用戶選擇要使用的應用程序,並可選擇使用 標記爲優選。

相反,如果用戶正在選擇一個菜單項來發送圖片 他們正在查看給其他人,他們可能想要做的事情有很多不同的地方:通過電子郵件發送,上傳它到一個 網絡服務等。在這種情況下,應使用CHOOSER行動,至 總是向用戶列出他們可以做的事情,以 爲由調用者給出的好標題,例如「發送該照片用:」。