android 分享功能 总汇
来源:互联网 发布:鬼笔鹅膏 知乎 编辑:程序博客网 时间:2024/05/01 20:04
1.发送文本内容
最直接最常用的是用ACTION_SEND来从一个应用发送文本内容到另一个应用,例如,我们的内置浏览器可以与任何页面当前的URL来共享文字,下面的例子就是共享文本内容
<span style="background-color: inherit; font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18px;"></span><pre name="code" class="java">Intent sendIntent = new Intent();sendIntent.setAction(Intent.ACTION_SEND);//这里是你发送的文本sendIntent.putExtra(Intent.EXTRA_TEXT, "我用手机测试分享内容");sendIntent.setType("text/plain");startActivity(Intent.createChooser(sendIntent, "我是弹出框的标题"));
2.发送二进制内容
二进制内容的共享使用Action为ACTION_SEND,在设置适当的MIME类型,并且添加putExtra(Intent.EXTRA_STREAM, URI),下面是一个常用的共享图片的代码,也可以共享任何类型的二进制内容
Intent shareIntent = new Intent();shareIntent.setAction(Intent.ACTION_SEND);shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);shareIntent.setType("image/jpeg");startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));
- 你可以使用MIME type为“ */*” ,他只会匹配处理一般数据流的Activity
- 接收应用程序需要Uri指定数据的访问权限
- 在SD卡的文件,我们使用File file = new File(filePath); Uri.fromFile(file),然后把他传递给Intent
- 在应用程序的目录中,openFileOutput的模式为MODE_WORLD_READABLE,然后我们可以使用getFileStreamPath()返回一个File,然后利用Uri.fromFile(file)传递给Intent
- 可以扫描图像,视频和音频等媒体文件,添加到系统MediaStore使用SCANFILE()来扫描文件,扫描完成后会调用 onScanCompleted()回调方法来返回一个Uri
- 图片使用insertImage()方法插入到系统MediaStore也会返回一个图片的Uri
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
File file = new File("mnt/sdcard/share.png");
System.out.println(Uri.fromFile(file));
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
shareIntent.setType("image/jpeg");
startActivity(Intent.createChooser(shareIntent, "共享图片"));
发现分享图片时候设置的文本内容看不到,可以这样设置
shareIntent.putExtra("sms_body", msgText); // 文本内容
我们要共享多个二进制内容利用Action为ACTION_SEND_MULTIPLE,下面是我们共享多张图片
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sharedcontext" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.sharedcontext.MainActivity" android:label="@string/app_name" > <!-- 应用程序的启动 Intent,我们例子只有一个Activity--> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- 处理文字的Intent 我们需要定义action, category, 和文字对应的MIME --> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/*" /> </intent-filter> <!-- 处理单张图片的Intent --> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> <!-- 处理多张图片的Intent --> <intent-filter> <action android:name="android.intent.action.SEND_MULTIPLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> </activity> </application</manifest>
ArrayList<Uri> imageUris = new ArrayList<Uri>();imageUris.add(imageUri1); // Add your image URIs hereimageUris.add(imageUri2);Intent shareIntent = new Intent();shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);shareIntent.setType("image/*");startActivity(Intent.createChooser(shareIntent, "Share images to.."));
当一个应用程序构建上面那样子的Intent,并吧它传递给StartActivity(),我们的应用程序就会被列在Intent选择器中,当用户选择该应用程序就进入相对应的Activity(上面的例子是MainActivity),我们只需要在MainActivity处理这样内容并用相对应的UI显示, MainActivity如下
package com.example.sharedcontext;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = getIntent();//获得Intent的ActionString action = intent.getAction();//获得Intent的MIME typeString type = intent.getType();if(Intent.ACTION_SEND.equals(action) && type != null){//我们这里处理所有的文本类型if(type.startsWith("text/")){//处理获取到的文本,这里我们用TextView显示handleSendText(intent);}//图片的MIME type有 image/png , image/jepg, image/gif 等,else if(type.startsWith("image/")){//处理获取到图片,我们用ImageView显示handleSendImage(intent);}}else if(Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null){ if (type.startsWith("image/")) { //处理多张图片,我们用一个GridView来显示 handleSendMultipleImages(intent); }}}/** * 用TextView显示文本 * 可以打开一般的文本文件 * @param intent */private void handleSendText(Intent intent){ TextView textView = new TextView(this); //一般的文本处理,我们直接显示字符串 String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT); if(sharedText != null){ textView.setText(sharedText); } //文本文件处理,从Uri中获取输入流,然后将输入流转换成字符串 Uri textUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); if(textUri != null){ try { InputStream inputStream = this.getContentResolver().openInputStream(textUri); textView.setText(inputStream2Byte(inputStream));} catch (Exception e) {e.printStackTrace();} } //设置给Activity setContentView(textView);}/** * 将输入流转换成字符串 * @param inputStream * @return * @throws IOException */private String inputStream2Byte(InputStream inputStream) throws IOException{ByteArrayOutputStream bos = new ByteArrayOutputStream();byte [] buffer = new byte[1024];int len = -1;while((len = inputStream.read(buffer)) != -1){bos.write(buffer, 0, len);}bos.close();//指定编码格式为UIT-8return new String(bos.toByteArray(), "UTF-8");}/** * 用ImageView显示单张图片 * @param intent */private void handleSendImage(Intent intent) { Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); if (imageUri != null) { ImageView imageView = new ImageView(this); imageView.setImageURI(imageUri); setContentView(imageView); }}/** * 用GridView显示多张图片 * @param intent */private void handleSendMultipleImages(Intent intent) { final ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); if (imageUris != null) { GridView gridView = new GridView(this); //设置item的宽度 gridView.setColumnWidth(130); //设置列为自动适应 gridView.setNumColumns(GridView.AUTO_FIT); gridView.setAdapter(new GridAdapter(this, imageUris)); setContentView(gridView); gridView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,final int position, long id) {//点击GridView的item 可以分享图片给其他应用//这里可以参考http://blog.csdn.net/xiaanming/article/details/9395991Intent intent = new Intent();intent.setAction(Intent.ACTION_SEND);intent.putExtra(Intent.EXTRA_STREAM, imageUris.get(position));intent.setType("image/*");startActivity(Intent.createChooser(intent, "共享图片"));}}); }}/** * 重写BaseAdapter * @author xiaanming * */public class GridAdapter extends BaseAdapter{private Context mContext;private ArrayList<Uri> list;public GridAdapter(Context mContext, ArrayList<Uri> list){this.list = list;this.mContext = mContext;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ImageView imageView;if(convertView == null){imageView = new ImageView(mContext);imageView.setPadding(8, 8, 8, 8);}else{imageView = (ImageView) convertView;}imageView.setImageURI(list.get(position));return imageView;}}}
出处:http://blog.csdn.net/xiaanming/article/details/9428613
0 0
- android 分享功能 总汇
- Android 分享功能
- android 使用分享功能
- Android分享功能
- android 分享功能
- Android分享功能
- Android分享功能
- android分享功能开发!!!
- Android分享功能
- Android使用分享功能
- Android 分享功能
- android 分享功能
- android 实现分享功能
- Android分享功能源码
- android 分享功能开发
- android 分享功能
- android分享功能开发
- android分享功能
- 非官方的飒飒
- opencv用haartraining训练出现的一些问题
- hdu 1159 Common Subsequence(LCS)
- 层次任务分析
- 时间编程和实现原理
- android 分享功能 总汇
- 微软保密新政:外用工服务一年半就暂停
- Java Singleton 单例模式思考
- 玻璃性质的计算
- Ubuntu13.04安装配置 tftp 服务方法
- 《Spring3.X企业应用开发实战》学习笔记--DAO和事务
- NETSTAT
- 浅谈压力测试
- 玻璃化转变