我需要开发一个具有共享功能的应用程序。我必须分享Facebook,Twitter,电子邮件和其他服务。
我怎样才能做到这一点?网上有图书馆吗?对于iOS开发,有ShareKit,但对于Android?
谢谢 :)
Paresh Mayani的回答大多是正确的。只需使用Broadcast Intent让系统和所有其他应用程序选择内容将以何种方式共享。
要共享文本,请使用以下代码:
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"));
sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,"your subject" );
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "your text");
startActivity(Intent.createChooser(sharingIntent, ""));
这会有所帮助
1-首先定义此常量
public static final String FACEBOOK_PACKAGE_NAME = "com.facebook.katana";
public static final String TWITTER_PACKAGE_NAME = "com.twitter.android";
public static final String INSTAGRAM_PACKAGE_NAME = "com.instagram.android";
public static final String PINTEREST_PACKAGE_NAME = "com.pinterest";
public static final String WHATS_PACKAGE_NAME = "com.whatsapp";
2-秒使用此方法
public static void shareAppWithSocial(Context context, String application, String title,
String description) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setPackage(application);
intent.putExtra(android.content.Intent.EXTRA_TITLE, title);
intent.putExtra(Intent.EXTRA_TEXT, description);
intent.setType("text/plain");
try {
// Start the specific social application
context.startActivity(intent);
} catch (android.content.ActivityNotFoundException ex) {
// The application does not exist
Toast.makeText(context, "app have not been installed.", Toast.LENGTH_SHORT).show();
}
}
是的,你可以...你只需要知道应用程序的确切包名称:
你可以像这样创建意图
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
}
我想你想给分享按钮,点击哪个合适的媒体/网站选项应该与它分享。在Android中,您需要为此创建createChooser
。
分享文字:
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"));
共享二进制对象(图像,视频等)
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"));
仅供参考,以上代码均来自Sharing content in Android using ACTION_SEND Intent
用这个
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 mail中挂起..但它失败For Face Book页面...它是Facebook android SDK中的已知错误..但它们仍然没有'修好了
ACTION_SEND
只会为您提供使用GMail,YahooMail等发送的选项(手机上安装的任何可以执行ACTION_SEND
的应用程序)。如果你想在Facebook或Twitter上分享,你需要为每个按钮分配自定义按钮,并使用自己的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
这将让你在什么应用程序上分享你的应用程序:
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"));
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"));