安卓之文字,链接,图片,音乐,分享功能的实现

转发请注明出处:http://blog.csdn.net/qq_28055429/article/details/51442643


搞了好久,还是没搞好,没得到想要的效果,还是总结一下,以供和我一样的新手参考:

ONE: 相关知识

一,Intent的相关属性:

(1)Action: 指Intent将要完成的动作

setAction:设置动作

getAction:获取动作

(2)Data: 指执行动作需要操作的数据,不同的Action有不同的Data

如:在联系人数据库中的一条联系人记录,表现形式为Uri

ACTION_DIAL content://contacts/people/1 :显示电话拨号界面,并填充标识为1的人的信息

ACTION_VIEW tel:10086 :显示电话拨号界面,并填充给定的号码10086

(3)Type:  数据类型,显式指定Intent的数据类型(MIME)

(4)Category:  类别,包含了处理该Intent的组件的种类信息,起着对action的补充说明的作用

如:

CATEGORY_HOME  :  表示返回Home界面

CATEGORY_LAUNCHER : 表示Intent的接受者应该在Launcher中作为顶级应用出现


(5)Component  :  组件,指定Intent的目标组件的类名称  (指定了这个属性后,Intent的其他属性都是可选的)

Android查找时,若无指定Componet,则在,action,data/type,category,中查找,找到匹配的组件,

若有指定的Componet,则直接使用此指定的Componet组件


(6)Extras:   附近信息,是其他所有附近信息的集合

(7)flag  :    该属性用于通知系统如何启动目标Activity , 或者启动之后采取怎样的操作

如:

FLAG_ACTIVITY_NEW_TASK: 通知系统目标Activity作为新的Task进行初始化



二,Intent的两种操作方式:显式与隐式

显式:Intent intent = new Intent(MainActivity.this , SecondActivity.class);

startActivity(intent);   指定了目标(SecondActivity),不需要去解析

隐式:不知道接收者,需要解析


三,Intent解析:

(1)通过查找已注册的AndroidManifest.xml中的所有Intent Filter及其中定义的Intent,最终找到匹配的Intent

若组件没有Intent filters,那么它只能接受显式Intent,

若有,则能同时接受两者

(2)当一个Intent和Intent Filter进行比较时,Android是通过Intent的action, type , category这三个属性进行判断的,具体如下:

Action: IntentFilter中可以有一个或者多个Action用于过滤,而Intent请求中只要有一个匹配其中的action即可;

            若IntentFilter没有设置action值,则所有的Intent都会被过滤

Data  :   IntentFilter也可以设置多个Data ,   也可以没有,  Data包含的内容主要是URL和数据类型,在对Data进行查找时主要

           根据这两点

Category  :   IntentFilter 也可以设置多个category  , 只有当Intent中所有的category 都能匹配到IntentFilter中的category时才能通过   检查


四,注意地方

(1)setType和setData只能有一个生效

(2)如若同时设置setType和setData,可使用用函数setDataAndType

 

TWO  :   开始分享代码

type常用形式:

Text:文本

image/* :支持所有格式图片

text/plain  : 纯文本

text/html  :  HTML文档

text/*  :  text类型

video/mpeg  :  MPEG动画

等等,

还有一个(*/*)

代码:


package com.maiyu.simpleonemusic;

import java.io.File;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;

public class Share extends Activity{
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		//可以在此处为三个分享按钮绑定ID并设置监听器,这里不写了
		
		super.onCreate(savedInstanceState);
	}
	
	//(1)分享字符串
	public void shareStr(){
		//创建分享Intent
		Intent sharedIntent = new Intent();
		//设置动作为Intent.ACTION_SEND
	    sharedIntent.setAction(Intent.ACTION_SEND);
		//设置为文本类型
		sharedIntent.setType("text/*");
		sharedIntent.putExtra(Intent.EXTRA_TEXT,"你好聪明"   );	//设置要分享的内容
	    startActivity(Intent.createChooser(sharedIntent, "分享到:"));
		
	}
	
	//分享图片
	public void shareI(){
		//File.separator:分割号
	    String imagePath = Environment.getExternalStorageDirectory() + File.separator + "test.jpg";
        //由文件得到uri
        Uri imageUri = Uri.fromFile(new File(imagePath));
        Log.d("share", "uri:" + imageUri);  //输出:file:///storage/emulated/0/test.jpg
        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
        shareIntent.setType("image/*");
        startActivity(Intent.createChooser(shareIntent, "分享到"));
		
	}
	//分享音乐,这里只是可以分享到qq
		public void shareMusic(){
			
			String url = Environment.getExternalStorageDirectory() + File.separator + "test.mp3";
			Intent share = new Intent(Intent.ACTION_SEND);
			//创建组件,
			ComponentName component = new ComponentName("com.tencent.mobileqq","com.tencent.mobileqq.activity.JumpActivity");
			share.setComponent(component);		//设置组件
			File file = new File(url);//参数为谋音乐在手机中的路径
			System.out.println("file " + file.exists());
			share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
			share.setType("*/*");
			startActivity(Intent.createChooser(share, "分享到"));

			
		}
	
	
	
}

注意:

分享音乐时,只是实现了分享到QQ的平台,

可以用sharesdk来实现别的平台:

具体略,

附注:我也不熟练






你可能感兴趣的:(android,intent,音乐分享,文本分享,setData,setType)