android利用Intent.ACTION_SEND实现分享

提到分享最常用的都是第三方分享,例如盟,ShareSDK等等,当然也用使用微信,qq等官方的SDK分享;最近在项目中使用了系统自带的分享功能,个人感觉要更简单。

先上代码

文本分享

代码如下:

public void shareText() {
        Intent sendIntent = new Intent();
        ComponentName comp = new ComponentName("目标app包名", "目标app类名");
        sendIntent.setComponent(comp);
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.setType("text/plain");
        sendIntent.putExtra(Intent.EXTRA_TEXT, "要分享的文本内容");
        startActivity(sendIntent);
    }

图片分享

代码如下:

public void shareImage() {
        ComponentName comp = new ComponentName("目标app包名", "目标app类名");
        Intent sendIntent = new Intent();
        sendIntent.setComponent(comp);
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.setType("image/*");
        sendIntent.putExtra(Intent.EXTRA_STREAM, "图片的uri");
       startActivity(sendIntent);
    }

首先介绍ComponentName类。 ComponentName与Intent同位于Android.content包下,我们从android官方文档中可以看到,这个类主要用来定义可见一个应用程序组件,例如:Activity,Service,BroadcastReceiver或者ContentProvider。new ComponentName(,);括号内填入目标APP的包名和接收资料的类名 ,那么怎样才能找到它们呢(当然!你可以百度)?,下面介绍我的方法:

Intent it = new Intent(Intent.ACTION_SEND);
        it.setType("text/plain");
        List resInfo = getPackageManager().queryIntentActivities(it, 0);
        if (!resInfo.isEmpty()) {
            List targetedShareIntents = new ArrayList();
            for (ResolveInfo info : resInfo) {
                Intent targeted = new Intent(Intent.ACTION_SEND);
                targeted.setType("text/plain");
                ActivityInfo activityInfo = info.activityInfo;
            }
        }

通过getPackageManager().queryIntentActivities(it, 0)我们可以得到当前已安装的所有支持分享的应用的包名和类名;结合前面的方法即可完成分享。
有何不当之处还请各位大神多多指教!!!

你可能感兴趣的:(android利用Intent.ACTION_SEND实现分享)