2010-11-01 116 views
21

有沒有類似於Android的getsharekit.com?它允許分享URL到社交網站。有沒有類似的,或者我需要單獨編寫Facebook,Twitter和電子郵件?在Android中分享Facebook,Twitter和電子郵件的URL?

+1

每種情況稍微好一些答案都可以在這些問題中找到:Facebook的(http://stackoverflow.com/questions/7545254/android-and-facebook-share-intent) ,[Twitter](http://stackoverflow.com/questions/2077008/android-intent-for-twitter-application),[email](http://stackoverflow.com/questions/8701634/send-email-intent) (使用'Intent.EXTRA_TEXT'將URL包含在電子郵件正文中)。 – Jonik 2014-04-10 19:55:25

+0

這是我的解決方案,工作正常,只是爲了在Facebook上共享URL,http://stackoverflow.com/a/29529335/513413 – Hesam 2015-04-09 03:43:29

回答

55

我不知道如果這是你的意思,但你可以使用Android內置的共享菜單...

您可以共享多(只要一個URL到Facebook,Twitter,Gmail來應用程序使用意圖安裝在設備上):

Intent i = new Intent(Intent.ACTION_SEND); 
i.setType("text/plain"); 
i.putExtra(Intent.EXTRA_SUBJECT, "Sharing URL"); 
i.putExtra(Intent.EXTRA_TEXT, "http://www.url.com"); 
startActivity(Intent.createChooser(i, "Share URL")); 

如果你想分享給用戶的設備上沒有安裝,例如應用程序 - 臉譜,那麼你就必須使用Facebook SDK。

如果你希望你的活動,以處理來自其他應用共享以及文本數據,你可以添加到您的AndroidManifest.xml:

<activity android:name=".ShareLink"> 
    <intent-filter> 
     <action android:name="android.intent.action.SEND" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:mimeType="text/plain" /> 
    </intent-filter> 
</activity> 

希望這有助於!

+1

我正在尋找一個解決方案,而不使用已安裝的應用程序。 – sunil 2010-11-19 13:20:13

+1

這不適用於Facebook – 2010-12-11 18:38:14

+0

謝謝你,我已經從text/html更改爲text/plain,並且此工作正常,除了向活動添加意圖過濾器部分 – 2011-11-19 13:53:38

-4

對我來說,這只是正常工作:

startActivity(Intent.createChooser(new Intent(Intent.ACTION_SEND, 
    Uri.parse("http://...")),"Share URL"));// share url is on your own 
+1

不起作用,並給出「沒有應用程序可以執行此操作」 – 2014-03-31 15:23:51

+0

不工作:錯誤「沒有應用程序可以執行此操作」 – 2015-05-27 09:51:57

+0

因爲它沒有應用程序可以執行此操作是沒有指定mimetype。應用過濾器對類型發送操作。如果您沒有指定它(文本/純文本),則沒有應用程序會攔截該意圖 – 2015-07-22 10:02:27

1

你可以試試這個...

private void shareTextUrl() { 
     Intent share = new Intent(android.content.Intent.ACTION_SEND); 
     share.setType("text/plain"); 
     share.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 

     share.putExtra(Intent.EXTRA_SUBJECT, "Title Of The Post"); 
     share.putExtra(Intent.EXTRA_TEXT, "<source url>"); 

     startActivity(Intent.createChooser(share, "Share text to...")); 
    } 
0

這裏是我的實現,如果你想僅僅通過增加包名,您可以添加更多的應用程序。該代碼還根據其名稱對應用程序進行排序。

List<Intent> targetShareIntents = new ArrayList<Intent>(); 
    Intent shareIntent = new Intent(); 
    shareIntent.setAction(Intent.ACTION_SEND); 
    shareIntent.setType("text/plain"); 
    PackageManager pm = getActivity().getPackageManager(); 
    List<ResolveInfo> resInfos = pm.queryIntentActivities(shareIntent, 0); 
    if (!resInfos.isEmpty()) { 
     System.out.println("Have package"); 
     for (ResolveInfo resInfo : resInfos) { 
      String packageName = resInfo.activityInfo.packageName; 
      Log.i("Package Name", packageName); 

      if (packageName.contains("com.twitter.android") || packageName.contains("com.facebook.katana") 
        || packageName.contains("com.whatsapp") || packageName.contains("com.google.android.apps.plus") 
        || packageName.contains("com.google.android.talk") || packageName.contains("com.slack") 
        || packageName.contains("com.google.android.gm") || packageName.contains("com.facebook.orca") 
        || packageName.contains("com.yahoo.mobile") || packageName.contains("com.skype.raider") 
        || packageName.contains("com.android.mms")|| packageName.contains("com.linkedin.android") 
        || packageName.contains("com.google.android.apps.messaging")) { 
       Intent intent = new Intent(); 

       intent.setComponent(new ComponentName(packageName, resInfo.activityInfo.name)); 
       intent.putExtra("AppName", resInfo.loadLabel(pm).toString()); 
       intent.setAction(Intent.ACTION_SEND); 
       intent.setType("text/plain"); 
       intent.putExtra(Intent.EXTRA_TEXT, "https://website.com/"); 
       intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.share_text)); 
       intent.setPackage(packageName); 
       targetShareIntents.add(intent); 
      } 
     } 
     if (!targetShareIntents.isEmpty()) { 
      Collections.sort(targetShareIntents, new Comparator<Intent>() { 
       @Override 
       public int compare(Intent o1, Intent o2) { 
        return o1.getStringExtra("AppName").compareTo(o2.getStringExtra("AppName")); 
       } 
      }); 
      Intent chooserIntent = Intent.createChooser(targetShareIntents.remove(0), "Select app to share"); 
      chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetShareIntents.toArray(new Parcelable[]{})); 
      startActivity(chooserIntent); 
     } else { 
      Toast.makeText(getActivity(), "No app to share.", Toast.LENGTH_LONG).show(); 
     } 
    } 
相關問題