Android分享其他APP的内容之文本和图片

     像今日头条,网易新闻,我们如何才能分享其内容呢?本地的图库的图片,该如何拿到呢?

Android 提供了应用程序间的内容分享机制,这里只对分享其他应用的内容举例。

如果想要分享其他应用数据,首先要在manifest文件上注册,如下:


<activity android:name=".FriendShareActivity"
            android:label="@string/friend"
            android:icon="@mipmap/friend"
            >
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>
        </activity>

这里三个<intent-filter>分别解释下:

  <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>

代表数据源就一个,且数据类型是image。同理:


<intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>

代表数据源就一个,数据类型是text(文本类型)。

 <intent-filter>
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>

android.intent.action.SEND_MULTIPLE就可以看出,这个是可以分享多个数据的Image类型。


接收数据:

 /**
     * 接收数据
     */
    private void intentSend() {

        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);
            } else if (type.startsWith("image/")) {
               handleSendImage(intent);
               // intent.get
            }
        } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
            if (type.startsWith("image/")) {
                handleSendMultipleImages(intent);
            }
        } else {

        }

    }

这里接收三个类型的数据,文本,单张图片,多张图片

1,文本

/**
     * 分享文本
     * @param intent
     */
    private void handleSendText(Intent intent) {
        String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
        String sharedTitle = intent.getStringExtra(Intent.EXTRA_TITLE);
        if (sharedText != null) {
            text.setText(sharedText);
        }
    }


这个比较简单,直接取出数据即可。

2,单张图片

/**
     * 获取图片 单张
     * @param intent
     */
    private void handleSendImage(Intent intent) {
        Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
        if (imageUri != null) {
            getRealPathFromURI(this,imageUri);
        }
    }

拿出图片的URI 并且取出原图:

 /**
     * 通过Uri获取文件在本地存储的真实路径
     * @param act
     * @param contentUri
     * @return
     */
    public String getRealPathFromURI(Activity act, Uri contentUri) {
        // can post image
        String[] proj = { MediaStore.Images.Media.DATA };
        Cursor cursor = getContentResolver().query(contentUri, proj, // Which columns to return
                null, // WHERE clause; which rows to return (all rows)
                null, // WHERE clause selection arguments (none)
                null); // Order-by clause (ascending by name)
        int column_index = 0;
        if( cursor.moveToFirst())
        {
             column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
             //一个TextView 展示
             text.append(cursor.getString(column_index)+"\n");
        }

        return cursor.getString(column_index);
    }
3,多张图片


/**
     * 多图分享
     * @param intent
     */
    private void handleSendMultipleImages(Intent intent) {
        ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
        if (imageUris != null) {
            for (Uri image : imageUris){
                getRealPathFromURI(this,image);
            }

        }
    }

多张图片无非就是拿到Uri 数组,然后便利获取其真实路径。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值