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

来源:互联网 发布:js首存10元送39元彩金 编辑:程序博客网 时间:2024/04/30 07:20

转发请注明出处: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{@Overrideprotected void onCreate(Bundle savedInstanceState) {//可以在此处为三个分享按钮绑定ID并设置监听器,这里不写了super.onCreate(savedInstanceState);}//(1)分享字符串public void shareStr(){//创建分享IntentIntent 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, "分享到"));}//分享音乐,这里只是可以分享到qqpublic 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来实现别的平台:

具体略,

附注:我也不熟练






0 0
原创粉丝点击