实现分享的功能的几个方法:
1.调用系统的分享方法
2.通过第三方sdk,比如ShareSDK,友盟等等
3.自行使用各自平台的SDK,如QQ 微信 微博等
分享文本信息:
Intent intent =new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Email message text");
String title ="分享文字";
PackageManager manager =getPackageManager();
List activitys =manager.queryIntentActivities(intent,0);
boolean isIntentSafe =activitys.size()>0;
if (isIntentSafe){
Intent intent1 =Intent.createChooser(intent,title);
startActivity(intent1);
}
分享单张图片:
String path = getResourcesUri(R.drawable.shu_1);
Intent imageIntent = new Intent(Intent.ACTION_SEND);
imageIntent.setType("image/jpeg");
imageIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(path));
startActivity(Intent.createChooser(imageIntent, "分享"));
分享多张图片
ArrayList imageUris = new ArrayList<>();
Uri uri1 = Uri.parse(getResourcesUri(R.drawable.dog));
Uri uri2 = Uri.parse(getResourcesUri(R.drawable.shu_1));
imageUris.add(uri1);
imageUris.add(uri2);
Intent mulIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
mulIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
mulIntent.setType("image/jpeg");
startActivity(Intent.createChooser(mulIntent,"多文件分享"));
分享的res中的图片,转化成uri,方法如下:
private String getResourcesUri(@DrawableRes int id) {
Resources resources = getResources();
String uriPath = ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
resources.getResourcePackageName(id) + "/" +
resources.getResourceTypeName(id) + "/" +
resources.getResourceEntryName(id);
Toast.makeText(this, "Uri:" + uriPath, Toast.LENGTH_SHORT).show();
return uriPath;
}
指定分享到微信:
Intent wechatIntent = new Intent(Intent.ACTION_SEND);
wechatIntent.setPackage("com.tencent.mm");
wechatIntent.setType("text/plain");
wechatIntent.putExtra(Intent.EXTRA_TEXT, "分享到微信的内容");
startActivity(wechatIntent);```
指定分享到QQ:
Intent qqIntent = new Intent(Intent.ACTION_SEND);
qqIntent.setPackage("com.tencent.mobileqq");
qqIntent.setType("text/plain");
qqIntent.putExtra(Intent.EXTRA_TEXT, "分享到微信的内容");
startActivity(qqIntent);
就像我们的程序能够分享数据给其他程序一样,其也能方便的接收来自其他程序的数据。需要考虑的是用户与我们的程序如何进行交互,以及我们想要从其他程序接收数据的类型。例如,一个社交网络程序可能会希望能够从其他程序接受文本数据,比如一个有趣的网址链接。Google+的Android客户端会接受文本数据与单张或者多张图片。用户可以简单的从Gallery程序选择一张图片来启动Google+,并利用其发布文本或图片。
2.处理接收到的数据
为了处理从Intent带来的数据,可以通过调用getIntent()方法来获取到Intent对象。拿到这个对象后,我们可以对其中面的数据进行判断,从而决定下一步行为。请记住,如果一个activity可以被其他的程序启动,我们需要在检查intent的时候考虑这种情况(是被其他程序而调用启动的)。
void onCreate (Bundle savedInstanceState) {
...
// Get intent, action and MIME type
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
handleSendText(intent); // Handle text being sent
} else if (type.startsWith("image/")) {
handleSendImage(intent); // Handle single image being sent
}
} else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
if (type.startsWith("image/")) {
handleSendMultipleImages(intent); // Handle multiple images being sent
}
} else {
// Handle other intents, such as being started from the home screen
}
...
}
void handleSendText(Intent intent) {
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
if (sharedText != null) {
// Update UI to reflect text being shared
}
}
void handleSendImage(Intent intent) {
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUri != null) {
// Update UI to reflect image being shared
}
}
void handleSendMultipleImages(Intent intent) {
ArrayList imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
if (imageUris != null) {
// Update UI to reflect multiple images being shared
}
}