Android分享机制总结
2016-03-03 21:23
579 查看
Android应用分享功能是一般应用所必不可少到功能。
一般有以下三种方式。
调用系统Activity进行分享
根据第三方App的包名和类名直接启动
注册第三方app账号,集成sdk
分享一般分为图片,文字,或者图片文字混合的分享。
分享文字
分享图片
分享多张图片
同时分享文字和图片
获取可分享app的包名和activity名
传递数据到第三方app
一般有以下三种方式。
调用系统Activity进行分享
根据第三方App的包名和类名直接启动
注册第三方app账号,集成sdk
1.调用系统Activity进行分享
这种方式最为简单,但是有些分享软件的高级功能无法使用。分享一般分为图片,文字,或者图片文字混合的分享。
分享文字
Intent intent= new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent .putExtra(Intent.EXTRA_SUBJECT, "subject"); intent.putExtra(Intent.EXTRA_TEXT,"my share content"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(Intent.createChooser(intentItem, "share"));
分享图片
Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); File file=new File(imgPath); Uri uri=Uri.fromFile(file); shareIntent.putExtra(Intent.EXTRA_STREAM, uri); shareIntent.putExtra(Intent.EXTRA_TEXT, "share content"); shareIntent.setType("image/*"); startActivity(Intent.createChooser(shareIntent,"image share "));
分享多张图片
ArrayList<Uri> imageUris = new ArrayList<Uri>(); imageUris.add(uri_1); imageUris.add(uri_2); Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE); shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); shareIntent.setType("image/*"); startActivity(Intent.createChooser(shareIntent, "image share"));
同时分享文字和图片
Intent intent = new Intent(Intent.ACTION_SEND); if(imgPath == null || imgPath.equals("")) { intent.setType("text/plain"); } else { File f = new File(imgPath); if (f != null && f.exists() && f.isFile()) { intent.setType("image/jpg"); Uri u = Uri.fromFile(f); intent.putExtra(Intent.EXTRA_STREAM, u); } } intent.putExtra(Intent.EXTRA_SUBJECT, msgTitle); intent.putExtra(Intent.EXTRA_TEXT, msgText); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(Intent.createChooser(intent, activityTitle));
2.根据第三方App的包名和类名直接启动
根据第三方包名直接启动,可以自定义界面,同时也不需要任何sdk,节省apk空间大小。缺点是,万一第三方app更新类名或者增加了某些特殊限制,这一方法也将会失效。获取可分享app的包名和activity名
List<ResolveInfo> mApps = new ArrayList<ResolveInfo>(); Intent intent = new Intent(Intent.ACTION_SEND, null); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setType("text/plain"); PackageManager pManager = context.getPackageManager(); mApps = pManager.queryIntentActivities(intent, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT); if(mApps!=null) { for (ResolveInfo resolveInfo : mApps) { Log.v("czh","packageName="+resolveInfo.activityInfo.packageName); Log.v("czh","activityName="+resolveInfo.activityInfo.name); } }
传递数据到第三方app
try { Intent intent = new Intent(); ComponentName componentName = new ComponentName( "com.renren.mobile.android", "com.renren.mobile.android.publisher.UploadPhotoEffect"); intent.setComponent(componentName); intent.setAction(Intent.ACTION_SEND); intent.setType("image/*"); intent.putExtra(Intent.EXTRA_TEXT, mSelectedString); startActivity(intent); } catch (Exception e) { e.printStackTrace(); }
3.注册第三方app账号,集成sdk
这种是最常用的方法,参考官方sdk即可。虽然麻烦了点,但是是最可靠的方法。相关文章推荐
- Android学习笔记----ContentProvider基本用法
- Android ListView带checkBox 实现多选模式
- android多分辨率适配
- 我同意条款(CheckBox的isChecked属性)
- 仿 iPhone Assistivetouch 自定义view
- Android多语言支持二
- Android修改所有activity的切换动画
- android中getSystemService详解
- 第一行代码13.4 调试Android程序
- Android布局的各种对齐问题
- Android Studio 1.3及以上 NDK环境配置
- Android Fragment 基础初识(下)
- Android学习之接口Interface
- Android Fragment 基础初识(上)
- android 跳转到系统设置界面的所有Intent
- 类似android点击5次出现开发者选项的功能
- x-Utils在android5.0下报错的解决方案
- Android Studio如何取消与SVN的关联
- Android中使用OrmLite(二):复杂条件查询
- Android开发之关闭多个Activity