Android – 分享到Facebook,Twitter,邮件,ecc

我需要开发一个具有共享function的应用程序。 我必须分享Facebook,Twitter,电子邮件和其他服务。

我怎样才能做到这一点? 网上有图书馆吗? 对于iOS开发有ShareKit,但对于Android?

谢谢 :)

帕里什·马亚尼的回答大多是正确的。 只需使用广播意图让系统和所有其他应用程序select共享内容的方式。

要共享文本,请使用以下代码:

String message = "Text I want to share."; Intent share = new Intent(Intent.ACTION_SEND); share.setType("text/plain"); share.putExtra(Intent.EXTRA_TEXT, message); startActivity(Intent.createChooser(share, "Title of the dialog the system will open")); 

是的,你可以…你只需要知道应用程序的确切包名称:

  • Facebook – “com.facebook.katana”
  • Twitter – “com.twitter.android”
  • Instagram – “com.instagram.android”
  • Pinterest – “com.pinterest”

你可以像这样创build意图

 Intent intent = context.getPackageManager().getLaunchIntentForPackage(application); if (intent != null) { // The application exists Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.setPackage(application); shareIntent.putExtra(android.content.Intent.EXTRA_TITLE, title); shareIntent.putExtra(Intent.EXTRA_TEXT, description); // Start the specific social application context.startActivity(shareIntent); } else { // The application does not exist // Open GooglePlay or use the default system picker } 

我想你想给分享button,点击适当的媒体/网站选项应该在那里分享。 在Android中,您需要创buildcreateChooser

分享文字:

 Intent sharingIntent = new Intent(Intent.ACTION_SEND); sharingIntent.setType("text/plain"); sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "This is the text that will be shared."); startActivity(Intent.createChooser(sharingIntent,"Share using")); 

共享二进制对象(图像,video等)

 Intent sharingIntent = new Intent(Intent.ACTION_SEND); Uri screenshotUri = Uri.parse(path); sharingIntent.setType("image/png"); sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri); startActivity(Intent.createChooser(sharingIntent, "Share image using")); 

仅供参考,以上代码是使用ACTION_SEND Intent从Android中共享内容引用的

用这个

 Facebook - "com.facebook.katana" Twitter - "com.twitter.android" Instagram - "com.instagram.android" Pinterest - "com.pinterest" SharingToSocialMedia("com.facebook.katana") public void SharingToSocialMedia(String application) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.setType("image/*"); intent.putExtra(Intent.EXTRA_STREAM, bmpUri); boolean installed = checkAppInstall(application); if (installed) { intent.setPackage(application); startActivity(intent); } else { Toast.makeText(getApplicationContext(), "Installed application first", Toast.LENGTH_LONG).show(); } } private boolean checkAppInstall(String uri) { PackageManager pm = getPackageManager(); try { pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES); return true; } catch (PackageManager.NameNotFoundException e) { } return false; } 

ACTION_SEND将正常工作,它需要文本的正文在墙上的Twitter,G邮件..但它失败的脸书页…它作为已知的错误在Facebook的Android SDK ..但仍然没有' t修复它

ACTION_SEND只会给你select使用GMail,YahooMail等等(安装在你的手机上,可以执行ACTION_SEND任何应用程序)发送。 如果你想在Facebook或Twitter上分享,你将需要为每个button设置自定义button,并使用自己的SDK,如Facebook SDK或Twitter4J 。

我认为下面的代码将帮助….

 public void btnShareClick(View v) { // shareBtnFlag = 1; Dialog d = new Dialog(DrawAppActivity.this); d.requestWindowFeature(d.getWindow().FEATURE_NO_TITLE); d.setCancelable(true); d.setContentView(R.layout.sharing); final Button btnFacebook = (Button) d.findViewById(R.id.btnFacebook); final Button btnEmail = (Button) d.findViewById(R.id.btnEmail); btnEmail.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { if (!btnEmail.isSelected()) { btnEmail.setSelected(true); } else { btnEmail.setSelected(false); } saveBtnFlag = 1; // Check if email id is available------------- AccountManager manager = AccountManager .get(DrawAppActivity.this); Account[] accounts = manager.getAccountsByType("com.google"); Account account = CommonFunctions.getAccount(manager); if (account.name != null) { emailSendingTask eTask = new emailSendingTask(); eTask.execute(); if (CommonFunctions.createDirIfNotExists(getResources() .getString(R.string.path))) { tempImageSaving( getResources().getString(R.string.path), getCurrentImage()); } Intent sendIntent; sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.setType("application/octet-stream"); sendIntent.setType("image/jpeg"); sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { account.name }); sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Drawing App"); sendIntent.putExtra(Intent.EXTRA_TEXT, "Check This Image"); sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + tempPath.getPath())); List<ResolveInfo> list = getPackageManager() .queryIntentActivities(sendIntent, PackageManager.MATCH_DEFAULT_ONLY); if (list.size() != 0) { startActivity(Intent.createChooser(sendIntent, "Send Email Using:")); } else { AlertDialog.Builder confirm = new AlertDialog.Builder( DrawAppActivity.this); confirm.setTitle(R.string.app_name); confirm.setMessage("No Email Sending App Available"); confirm.setPositiveButton("Set Account", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); confirm.show(); } } else { AlertDialog.Builder confirm = new AlertDialog.Builder( DrawAppActivity.this); confirm.setTitle(R.string.app_name); confirm.setMessage("No Email Account Available!"); confirm.setPositiveButton("Set Account", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Intent i = new Intent( Settings.ACTION_SYNC_SETTINGS); startActivity(i); dialog.dismiss(); } }); confirm.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); confirm.show(); } } }); btnFacebook.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { if (!btnFacebook.isSelected()) { btnFacebook.setSelected(true); } else { btnFacebook.setSelected(false); } saveBtnFlag = 1; // if (connection.isInternetOn()) { if (android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) { getCurrentImage(); Intent i = new Intent(DrawAppActivity.this, FaceBookAuthentication.class); i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(i); } else { ShowAlertMessage.showDialog(DrawAppActivity.this, R.string.app_name, R.string.Sd_card, R.string.button_retry); } } }); d.show(); } 

 public void tempImageSaving(String tmpPath, byte[] image) { Random rand = new Random(); tempfile = new File(Environment.getExternalStorageDirectory(), tmpPath); if (!tempfile.exists()) { tempfile.mkdirs(); } tempPath = new File(tempfile.getPath(), "DrawApp" + rand.nextInt() + ".jpg"); try { FileOutputStream fos1 = new FileOutputStream(tempPath.getPath()); fos1.write(image); fos1.flush(); fos1.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } sendBroadcast(new Intent( Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); } public byte[] getCurrentImage() { Bitmap b = drawingSurface.getBitmap(); ByteArrayOutputStream stream = new ByteArrayOutputStream(); b.compress(Bitmap.CompressFormat.PNG, 100, stream); byteArray = stream.toByteArray(); return byteArray; } private class emailSendingTask extends AsyncTask<String, Void, String> { @Override protected void onPreExecute() { progressDialog = new ProgressDialog(DrawAppActivity.this); progressDialog.setTitle(R.string.app_name); progressDialog.setMessage("Saving..Please Wait.."); // progressDialog.setIcon(R.drawable.icon); progressDialog.show(); } @Override protected String doInBackground(String... urls) { String response = ""; try { if (android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) { response = "Yes"; } else { ShowAlertMessage.showDialog(DrawAppActivity.this, R.string.app_name, R.string.Sd_card, R.string.button_retry); } } catch (Exception e) { e.printStackTrace(); } return response; } @Override protected void onPostExecute(String result) { if (result.contains("Yes")) { getCurrentImage(); } sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); progressDialog.cancel(); } } private class ImageSavingTask extends AsyncTask<String, Void, String> { @Override protected void onPreExecute() { progressDialog = new ProgressDialog(DrawAppActivity.this); progressDialog.setTitle(R.string.app_name); progressDialog.setMessage("Saving..Please Wait.."); // progressDialog.setIcon(R.drawable.icon); progressDialog.show(); } @Override protected String doInBackground(String... urls) { String response = ""; try { if (android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) { response = "Yes"; } else { ShowAlertMessage.showDialog(DrawAppActivity.this, R.string.app_name, R.string.Sd_card, R.string.button_retry); } } catch (Exception e) { e.printStackTrace(); } return response; } @Override protected void onPostExecute(String result) { if (result.contains("Yes")) { getCurrentImage(); if (CommonFunctions.createDirIfNotExists(getResources() .getString(R.string.path))) { saveImageInSdCard(getResources().getString(R.string.path), getCurrentImage()); } } sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); progressDialog.cancel(); } } 

对于Facebook应用程序使用Facebook SDK

  String message = "This is testing." Intent shareText = new Intent(Intent.ACTION_SEND); shareText .setType("text/plain"); shareText .putExtra(Intent.EXTRA_TEXT, message); startActivity(Intent.createChooser(shareText , "Title of the dialog the system will open")); 

这将让你分享你的应用程序什么的应用程序等:

 try { Intent i = new Intent(Intent.ACTION_SEND); i.setType("text/plain"); i.putExtra(Intent.EXTRA_SUBJECT, "My application name"); String sAux = "\nLet me recommend you this application\n\n"; sAux = sAux + "https://play.google.com/store/apps/details?id=Orion.Soft \n\n"; i.putExtra(Intent.EXTRA_TEXT, sAux); startActivity(Intent.createChooser(i, "choose one"));