【学以致用】android功能实现1---分享功能

在某程序中,选择某图片或者文字,点击分享,下方弹出一个选择框。点击分享并且弹出框这是分享主体的操作。弹出框中存在的内容,可供分享的对象,是分享客体。

分享主体与客体的实现均是围绕着Intent.ACTION_SEND这个官方Intent展开。官方给与了一个简单的分享流程,我们随着流程就能实现分享流程。

先上代码,下面是最简单分享主体的代码,只要在应用中调用本应用,就可以弹出分享框。

public static void share() {  

    Intent intent = new Intent(Intent.ACTION_SEND);  

    intent.setType("text/plain");  

    intent.putExtra(Intent.EXTRA_TEXT,”待分享文字”);  

    context.startActivity(Intent.createChooser(intent, “分享框的标题”));  

}

实现分享主体,是需要启动分享客体,所以需要使用Intent来启动,intent里面要包含分享的内容,以及Intent.ACTION_SEND 标识,就可以完成分享。

分享主体实例代码一共4行:

第一行:Intent intent = new Intent(Intent.ACTION_SEND);  

本行代码是创建一个actionIntent.ACTION_SENDIntent

这一行也可以分成两段来写:

Intent intent = new Intent();

Intent.setAction(Intent.ACTION_SEND);

这第一行代码就定义了这个intent是用来分享内容的。

第二行代码:intent.setType("text/plain");

本行代码是定义分享的内容,这里表示分享的是文字。而可以分享内容还可以分享图片,音乐,乃至所有文件。 无论什么文件均可以通过蓝牙发送,蓝牙发送也属于分享的客体。

"text/plain"就是ClipDescription.MIMETYPE_TEXT_PLAIN。是官方定义的文字type。所以这一行代码,我们也可以写成

intent.setType(ClipDescription.MIMETYPE_TEXT_PLAIN); 

如果写成这样,则需要import android.content.ClipDescription; 

MIMETYPE_TEXT_PLAIN这个名字可以看出,我们的setType的对象叫做mimeType。对于类型感兴趣的可以去搜索“mimeType类型大全”对其深入了解。

第三行代码: intent.putExtra(Intent.EXTRA_TEXT , ”待分享文字” );  

是很常见的putExtra,往intent放入文字信息。

这里还可以根据需要扩展放入一些intent的参数类容。

比如:intent.putExtra(Intent.EXTRA_SUBJECT, title);    // 添加标题

   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  // 添加Flag

第四行代码:context.startActivity(Intent.createChooser(intent, “分享框的标题”)

这一行代码是启动弹出框,并且在点击了弹出框的应用是,还会顺势启动目标应用,并将intent传入应用。

createChooser是用来生成分享列表的。也就是弹出一个框,里面展示着分享客体。

Startactivityandroid默认通过intent启动应用的方式,Context就在activity里面,activity里有getApplicationContext方法,可以获取context,同样,需要context的地方都可以用activity的对象代替。

比如,android的应用都是继承至activity,如果在本应用继承至activitymain这个类里面,则可以直接使用startActivity方法,前面不用加context前缀。

以上就是实现分享框架的方法,总结一下,我们需要提供的内容,仅仅是标题和文字类容两个自定义的String,就可以在调用本方法时,成功弹出分享框,分享给所有支持分享的应用。

分享客体:

分享客体是在分享主体的弹出框能够显示出来的app

分享是一个带actionintent。弹出框显示哪些应用是通过action来搜索“android.intent.action.SEND”

Intent.ACTION_SEND 就是android.intent.action.SEND,这两者没有区别。

所以,如果分享客体想出现在搜索框里,则使用

<intent-filter>

       <action android:name="android.intent.action.SEND"/>

       <category android:name="android.intent.category.DEFAULT"/>

       <data android:mimeType="text/plain"/>

</intent-filter>

这样在分享主题传入typeactionIntent.ACTION_SEND"text/plain"时,就能出现本应用。当用户点击我们的应用时,就会启动我们的应用。

获取分享的数据,并处理分享而来的数据:

我们知道应用都是被intent所启动的。启动的时候,会将intent通过startactivity传入被启动应用。

在被启动应用中,使用getIntent() 可以获取被传入的intent

代码如下:

private void share() {

        Intent intent = getIntent();

        String action = intent.getAction();

        if (!Intent.ACTION_SEND.equals(action)) {

          String share = intent.getStringExtra(Intent.EXTRA_TEXT);

          setText(share);  

        }                

    }

代码中,首先通过getIntent()获取传入的intent

随后String action = intent.getAction();

判断本次启动是否为因为分享而启动的。如果因为分享而启动,才需要进行分享内容的处理,如果仅仅是点击桌面图标启动,那就是普通启动了。

String share = intent.getStringExtra(Intent.EXTRA_TEXT);

获取数据库传输的文字内容,然后将文字进行自己希望的处理吧。

以上,就是分享功能的基础实现。

猜你喜欢

转载自blog.csdn.net/dax120/article/details/78551448