当前位置: 首页 > news >正文

Android App 实现分享功能及将应用加入分享列表 (分享功能可自定义需要分享的APP)...

1,自己封装的一个简单的Class:

public class ShareSample {

    /**
     * 获得分享列表(简单实现,只是把核心的东西写了写。不是太实用)
     * **/
    public void getShareList(final String title,final String content,final Activity mActivity)
    {
        final Map<String,ResolveInfo> appInfo =new HashMap<String, ResolveInfo>();
        List<ResolveInfo> appList=getShareTargets(mActivity);
        final String[] items;
        if(appList.size()>0){
            for (int i = 0; i < appList.size(); i++) {
                ResolveInfo tmp_ri=(ResolveInfo)appList.get(i);
                //ActivityInfo tmp_ai=tmp_ri.activityInfo;
                ApplicationInfo apinfo=tmp_ri.activityInfo.applicationInfo;
                String tmp_appName = apinfo.loadLabel(mActivity.getPackageManager()).toString();
                //这里就做了一个简单的得到应用名称判断, 实际情况根据 ResolveInfo 这东东 可以得到很多很多有用的东东哦。
                if(!tmp_appName.equals("微博"))
                {
                    continue;
                }
                appInfo.put(tmp_appName,tmp_ri);
            }
            items=new String[appInfo.size()];
            int j=0;
            for (Map.Entry<String,ResolveInfo> myEntry : appInfo.entrySet()) { 
                items[j]=myEntry.getKey();
                j++;
             } 
            
        }
        else{
            Toast.makeText(mActivity.getApplicationContext(),"暂无分享应用", Toast.LENGTH_SHORT).show();
            return;
        }
        if(appInfo.size()<1)
        {
            Toast.makeText(mActivity.getApplicationContext(),"暂无分享应用", Toast.LENGTH_SHORT).show();
            return;
        }
        /**
         * 这里用对话框简单的一个实现,实际开发中应该要单独抽取出来封装成一个自定义的列表。
         * 
         * **/
        new AlertDialog.Builder(mActivity).setTitle("选择分享") 
        .setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int item) { 
            
            CreateShare(title,content,mActivity,appInfo.get(items[item]));
            //CreateShare(title,content,mActivity);
            dialog.cancel(); 
        } 

        }).show();//显示对话框
        
    }
    
    /**
     * 实现自定义分享功能(主要就是启动对应的App)
     * **/
    private void CreateShare(String title,String content ,Activity activity,ResolveInfo appInfo) {  
        
        try
        {
            Intent shareIntent=new Intent(Intent.ACTION_SEND);
             shareIntent.setComponent(new ComponentName(appInfo.activityInfo.packageName, appInfo.activityInfo.name));  
             //这里就是组织内容了,  
            // shareIntent.setType("text/plain"); 
             shareIntent.setType("image/*"); 
             shareIntent.putExtra(Intent.EXTRA_TEXT, content);  
             shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
             activity.startActivity(shareIntent);  
            
        }catch (Exception e) {
            e.printStackTrace();
            // TODO: handle exception
        }
        
        
       
    }  
    /**
     * 默认分享列表(网上一大堆)
     * **/
    private void CreateShare(String title,String content ,Activity activity) {  
        Intent intent=new Intent(Intent.ACTION_SEND);
        intent.setType("image/*");   
        intent.putExtra(Intent.EXTRA_SUBJECT, title);   
        intent.putExtra(Intent.EXTRA_TEXT, content);    
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   
        activity.startActivity(Intent.createChooser(intent, title));
        
    }
    /**
     * 获得所有带Intent.ACTION_SEND的应用列表。 ResolveInfo 这个东东真不错。
     * **/
    private List<ResolveInfo> getShareTargets(Activity activity){
        Intent intent=new Intent(Intent.ACTION_SEND,null);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setType("text/plain");
        PackageManager pm=activity.getPackageManager();
        return pm.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
        }
}

2.测试调用:

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        try
        {
          ShareSample sample =new ShareSample();
          sample.getShareList("分享标题", "要分享的内容哦。呵呵", this);
        }catch (Exception e) {
            e.printStackTrace();
            // TODO: handle exception
        }
}

3.应用加入系统分享列表(这个在网上Copy的木有验证过)
只需在AndroidManifest.xml中加入以下代码:

<activity android:name=".SharePage" android:label="分享到微博">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
</activity>

 

4.小结:  

不是太复杂的东西。但如果不知道 ResolveInfo 这个东东怎么用就不太好搞了。(偶开始就不知道所以纠结了一下下。Android 小菜菜)

转载于:https://www.cnblogs.com/yeqw1985/archive/2013/02/08/2909366.html

相关文章:

  • 扩展C#与元编程
  • thinkphp session 跨域问题解决方案
  • 并行相关文章安全集合写的很好
  • Java List中数值排序
  • 蓝书《广搜的优化》整理
  • 树上染色+可怜与超市(树状DP)
  • MySQL修改最大连接数的两个方法,偏爱第一种
  • Spring Boot
  • 开放封闭原则 Open-Closed Principle(OCP)
  • 迅为iMX6Q开发板设备树内核-注册驱动例程介绍
  • spark-phoenix
  • PMP(第六版)中的控制账户、规划包、工作包
  • elastic stack安装运行(docker)
  • 排序算法整理
  • ArrayList 源码分析 基于jdk1.8:
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 345-反转字符串中的元音字母
  • Akka系列(七):Actor持久化之Akka persistence
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Android组件 - 收藏集 - 掘金
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • CSS 专业技巧
  • CSS3 变换
  • ES6系列(二)变量的解构赋值
  • HTML5新特性总结
  • javascript 总结(常用工具类的封装)
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 分类模型——Logistics Regression
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 手机端车牌号码键盘的vue组件
  • 树莓派 - 使用须知
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • !$boo在php中什么意思,php前戏
  • #NOIP 2014# day.1 T2 联合权值
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (十一)手动添加用户和文件的特殊权限
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • .bat文件调用java类的main方法
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Core 版本不支持的问题
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .net与java建立WebService再互相调用
  • :“Failed to access IIS metabase”解决方法
  • @RequestBody的使用
  • [ASP.NET 控件实作 Day7] 设定工具箱的控件图标
  • [C#] 如何调用Python脚本程序
  • [CLR via C#]11. 事件
  • [Go WebSocket] 多房间的聊天室(五)用多个小锁代替大锁,提高效率