天天看点

安卓分享(视屏、音频、图像、文件、文本消息)

安卓分享(视屏、音频、图像、文件、文本消息)
安卓分享(视屏、音频、图像、文件、文本消息)
安卓分享(视屏、音频、图像、文件、文本消息)

AndroidShare.apk下载 

AndroidShare源码

核心源码:

package com.sc.androidshare;

import java.io.File;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.sci.androidshare.R;


public class MainActivity extends Activity
{
	/** 选择分享视屏 */
	public void shareVideo()
	{
		selectFile(this, "video/*", true);
	}
	
	/** 选择分享图片 */
	public void shareImage()
	{
		selectFile(this, "image/*", true);
	}
	
	/** 选择分享音频 */
	public void shareAudio()
	{
		selectFile(this, "audio/*", true);
	}
	
	/** 分享文本信息 */
	public void shareMSG(String msg)
	{
		ShareMSG(this, "分享文本:" + msg);
	}
	
	/** 选择分享文件 */
	public void shareFile()
	{
		selectFile(this, "*/*", true);
	}
	
	/** 分享指定(路径、类型)的文件 */
	public void shareFile(String filePath, String fileType)
	{
		File file = new File(filePath);
		if (file.exists())
		{
			Uri uri = Uri.fromFile(file);
			shareFile(this, uri, fileType);
		}
	}
	
	// --------------
	
	EditText text = null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		text = (EditText) this.findViewById(R.id.textView1);
	}
	
	public void Button_Click(View view)
	{
		String msg = text.getText().toString();
		shareMSG("分享文本:" + msg);
	}
	
	public void Button_Click2(View view)
	{
		shareFile();
	}
	
	public void Button_Click3(View view)
	{
		shareVideo();
	}
	
	public void Button_Click4(View view)
	{
		shareAudio();
	}
	
	public void Button_Click5(View view)
	{
		shareImage();
	}
	
	/** 调用系统方法选择文件 */
	private void selectFile(Activity context, String type, boolean autoShare)
	{
		Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
		intent.setType(type);								// 设置类型,我这里是任意类型,任意后缀的可以这样写。
		intent.addCategory(Intent.CATEGORY_OPENABLE);
		
		if (autoShare)
			context.startActivityForResult(intent, SELECT);
		else context.startActivityForResult(intent, SELECT_ONLY);
	}
	
	final static int SELECT_ONLY = 3;	// 标记选取
	final static int SELECT = 1;	// 标记选取
	final static int SHARE = 2;		// 标记分享
	
	/** Activity执行结果 */
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		if (resultCode == Activity.RESULT_OK)
		{
			if (requestCode == SELECT)
			{
				Uri uri = data.getData();
				// String fileType = data.getType();
				String fileType = getType(uri);
				shareFile(this, uri, fileType);
				
				Toast.makeText(this, "分享文件:" + uri.getPath().toString(), Toast.LENGTH_SHORT).show();
			}
			else if (requestCode == SHARE)
			{
				ShareSuccess();
			}
		}
	}
	
	/** 获取uri对应的文件类型 */
	private String getType(Uri uri)
	{
		String uriPath = uri.getPath().toString();	// "/document/image:57329"
		int start = uriPath.lastIndexOf("/");
		int end = uriPath.lastIndexOf(":");
		
		String type = "*/*";
		if (end > start)
		{
			type = uriPath.substring(start + 1, end) + "/*";
		}
		return type;
	}
	
	/** 分享完成逻辑 */
	public void ShareSuccess()
	{
		Toast.makeText(this, "分享完成!", Toast.LENGTH_SHORT).show();
	}
	
	// ----------------
	
	/** 调用系統方法分享字符串消息 */
	public static void ShareMSG(Activity context, String msg)
	{
		Intent shareInt = new Intent(Intent.ACTION_SEND);
		// shareInt.setPackage("com.tencent.mm"); // 分享到微信
		
		shareInt.setType("text/plain");
		shareInt.putExtra(Intent.EXTRA_SUBJECT, "选择分享方式");
		shareInt.putExtra(Intent.EXTRA_TEXT, msg);              // 要分享的内容
		shareInt.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		
		// context.startActivity(Intent.createChooser(shareInt, "分享给"));
		context.startActivityForResult(Intent.createChooser(shareInt, "分享给"), 2);
	}
	
	/** 调用系統方法, 分享文件 */
	public static void shareFile(Activity context, Uri fileUri, String type)
	{
		if (fileUri != null)
		{
			Intent shareInt = new Intent(Intent.ACTION_SEND);
			shareInt.putExtra(Intent.EXTRA_STREAM, fileUri);
			
			Toast.makeText(context, "分享文件类型:" + type, Toast.LENGTH_SHORT).show();
			shareInt.setType(type);			// 文件类型
			
			// intent.setType("*/*");
			// intent.setType("image/*");//选择图片
			// intent.setType("audio/*"); //选择音频
			// intent.setType("video/*"); //选择视频 (mp4 3gp 是android支持的视频格式)
			// intent.setType("video/*;image/*");//同时选择视频和图片
			
			shareInt.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			shareInt.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
			
			context.startActivity(Intent.createChooser(shareInt, "分享给"));
			// context.startActivityForResult(Intent.createChooser(shareInt, "分享给"), 2);
		}
		else
		{
			Toast.makeText(context, "分享文件不存在", Toast.LENGTH_SHORT).show();
		}
	}
	
	// public void ShareFile(String filePath)
	// {
	// ArrayList<Uri> files = new ArrayList<Uri>();
	// files.add(Uri.fromFile(new File(filePath)));
	//
	// // 分享文件
	// Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);// 发送多个文件
	// intent.setType("*/*"); // 多个文件格式
	// intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, files);// Intent.EXTRA_STREAM同于传输文件流
	// startActivity(intent);
	// }
	
	/** 调用系統方法分享video */
	public static void ShareVideo(Activity context, Uri fileUri)
	{
		shareFile(context, fileUri, "video/*");
	}
	
	/** 调用系統方法分享image */
	public static void ShareImage(Activity context, Uri fileUri)
	{
		shareFile(context, fileUri, "image/*");
	}
	
	/** 调用系統方法分享audio */
	public static void ShareAudio(Activity context, Uri fileUri)
	{
		shareFile(context, fileUri, "audio/*");
	}
	
	/** 调用系統方法任意其他类型文件 */
	public static void Share(Activity context, Uri fileUri)
	{
		shareFile(context, fileUri, "*/*");
	}
	
	// 調用系統方法分享文件
	public static void shareVedioFile(Activity context, File file)
	{
		shareFile(context, Uri.fromFile(file), "video/*");
	}
	
//	// 根据文件后缀名获得对应的MIME类型。
//	private static String getMimeType(String filePath)
//	{
//		MediaMetadataRetriever mmr = new MediaMetadataRetriever();
//		String mime = "*/*";
//		if (filePath != null)
//		{
//			try
//			{
//				mmr.setDataSource(filePath);
//				mime = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE);
//			}
//			catch (IllegalStateException e)
//			{
//				return mime;
//			}
//			catch (IllegalArgumentException e)
//			{
//				return mime;
//			}
//			catch (RuntimeException e)
//			{
//				return mime;
//			}
//		}
//		return mime;
//	}
}