Android通过第三方应用将自己的应用信息分享出去

     通过第三方应用将自己应用信息分享出去。贴代码

    1, //点击分享之后弹出的对话框,这个对话框是我自己定义的    

Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("text/plain");//分享的类型
        AlertDialog.Builder customDia = new AlertDialog.Builder(activity, R.style.share_dialog);//自己定义的对话框
        final View viewDia = LayoutInflater.from(activity).inflate(R.layout.dialog, null);//布局里面是gridview
//        ImageView shareClose = (ImageView)viewDia.findViewById(R.id.share_close);
        GridView listView =(GridView)viewDia.findViewById(R.id.grid_view);
        final ShareAdapter adapter = new ShareAdapter(activity, intent);
        listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View view, int position,long id) {
                Intent intent = adapter.getIntentForPosition(position);
                SharedPreferences share = activity.getSharedPreferences("service_data", Context.MODE_PRIVATE);
                String url = /*share.getString("shareUrl", "")*/"";
                String local = activity.getResources().getConfiguration().locale.getCountry();
                String des = "";
                if("".equals(url) || url == null){
                    if ("CN".equals(local)) {
                        url = "http://www.wanyiwan.com";//分享的信息区分了语言
                    } else {
                        url = "https://wanyiwan.com";
                    }
                    if("".equals(des) || des == null){
                        des =activity.getResources().getString(R.string.des) ;
                    }
                }
                intent.putExtra(Intent.EXTRA_TEXT, des + "\n "+ url);
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_SINGLE_TOP);
                activity.startActivity(intent);
     2,适配器  



    public ShareAdapter(Context context, Intent intent) {
        mContext = context;
        mPackageManager = mContext.getPackageManager();
        mIntent = new Intent(intent);
        mInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        packageManager = mContext.getPackageManager();//拿到包管理器,它负责拿到图标
        mList = packageManager.queryIntentActivities(intent, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);//负责通过意图拿到能分享信息的应用

        mDisplayResolveInfoList = new ArrayList<DisplayResolveInfo>();
        if (mList == null || mList.isEmpty()) {
            mList = new ArrayList<ResolveInfo>();
        }

        final int N = mList.size();
        for (int i = 0; i < N; i++) {
            ResolveInfo ri = mList.get(i);
            CharSequence label = ri.loadLabel(mPackageManager);
            DisplayResolveInfo d = new DisplayResolveInfo(ri, null, null, label, null, new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name));
            if (!mDisplayResolveInfoList.contains(d)) {
                mDisplayResolveInfoList.add(d);
            }
        }

//        comparison();
        Collections.sort(mDisplayResolveInfoList, new SharedAppComparator());
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder = null;
        if(convertView == null) {
            convertView = mInflater.inflate(R.layout.share_item, null);
            viewHolder = new ViewHolder();
            viewHolder.imageView = (ImageView)convertView.findViewById(R.id.icon_share);
            viewHolder.textView = (TextView)convertView.findViewById(R.id.title_share);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder)convertView.getTag();
        }
        DisplayResolveInfo info = mDisplayResolveInfoList.get(position);
        viewHolder.imageView.setImageDrawable(info.mResoleInfo.loadIcon(packageManager));//拿到图标
        Log.e("share", "share icon==== " + info.mResoleInfo.loadIcon(packageManager) + " share title = " + info.mLabel);
        viewHolder.textView.setText(info.mLabel);//拿到标题
        return convertView;
    }

    public ResolveInfo getResolveInfo(int index){//封装了一层
        if(mDisplayResolveInfoList == null){
            return null;
        }
        DisplayResolveInfo d = mDisplayResolveInfoList.get(index);
        if(d.mResoleInfo == null){
            return null;
        }
        return d.mResoleInfo;
    }

    //返回跳转intent
    public Intent getIntentForPosition(int index) {
        if(mDisplayResolveInfoList == null){
            return null;
        }
        DisplayResolveInfo d = mDisplayResolveInfoList.get(index);
        Intent i = new Intent(d.mIntent == null ? mIntent : d.mIntent);
        i.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT | Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
        if(d.mResoleInfo != null){
            ActivityInfo a = d.mResoleInfo.activityInfo;
            i.setComponent(new ComponentName(a.applicationInfo.packageName, a.name));
        }
        return i;
    }



    /**
     * 打包数据 vo
     * @author
     */
    class DisplayResolveInfo {//封装
        private Intent mIntent;
        private ResolveInfo mResoleInfo;
        private CharSequence mLabel;
        private Drawable mDrawable;
        private ComponentName cn;

        private int position = Integer.MAX_VALUE;

        DisplayResolveInfo(ResolveInfo resolveInfo, Intent intent,
                           CharSequence info, CharSequence label, Drawable d,
                           ComponentName cn) {
            this.mIntent = intent;
            this.mResoleInfo = resolveInfo;
            this.mLabel = label;
            this.mDrawable = d;
            this.cn = cn;
        }


  


}
   如果想把自己的应用设定为能发送分享信息的应用,可以将activity的
<intent-filter>
    <action android:name="android.intent.action.SEND" />

    <data android:mimeType="text/plain" />

    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
,Android就可以通过这个类型将应用分为能发送信息的应用

              

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值