展会信息港展会大全

Android应用中使用及调用分享功能
来源:互联网   发布日期:2016-01-19 12:26:22   浏览:3434次  

导读:为了应用的推广、传播,很多的应用中都有分享功能,一个按钮,点击后会出现短信、微博等等一切实现了分享功能的应用列表。这一篇文章主要介绍怎 么调用分享功能和怎么实现分享接口让自己应用出现分享列表中。An ...

为了应用的推广、传播,很多的应用中都有 分享 功能,一个按钮,点击后会出现短信、微博等等一切实现了分享功能的应用列表。这一篇文章主要介绍怎 么调用分享功能和怎么实现分享接口让自己应用出现分享列表中。Android应用中能很方便的完成这些功能,这也正是Android的伟大之处,他能很简 单的完成应用之间的沟通以相互整合。

调用分享功能

1、分享文本

分享功能使用的隐式启动Activity的方法,这里的Action使用的是 ACTION_SEND。

1

2

3

4

5

Intent sendIntent = new Intent();

sendIntent.setAction(Intent.ACTION_SEND);

sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");

sendIntent.setType("text/plain");

startActivity(sendIntent);

效果如下图的图一。

2、改变分享列表标题

使用上面的分享方式分享列表标题为 使用一下内容完成操作 ,Android中提供了Intent.createChooser() ,这样能一直显示分享选择列表,并且修改了分享列表标题内容。

1

2

3

4

5

Intent sendIntent = new Intent();

sendIntent.setAction(Intent.ACTION_SEND);

sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");

sendIntent.setType("text/plain");

startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to)));

使用Intent.createChooser()的好处:

If you callIntent.createChooser() for the intent, Android will always display the chooser. This has some advantages:Even if the user has previously selected a default action for this intent, the chooser will still be displayed.If no applications match, Android displays a system message.You can specify a title for the chooser dialog.

分享功能不只是Intent.EXTRA_TEXT,还可以 EXTRA_EMAIL, EXTRA_CC, EXTRA_BCC,EXTRA_SUBJECT. 只需要接受方完成响应数据接受。

3、分享图片

分享功能还支持二进制内容(Binary Content),但是多数是处理的图片,因为shareIntent.setType("image/jpeg")这一项设置了内容类型。可也以是其他 类型,需要接受方支持。

1

2

3

4

5

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)));

4、分享图片列表

分享功能不仅支持单张图片,还支持图片列表,这里还是说的范围太窄了,应该声明不仅仅是图片。

1

2

3

4

5

6

7

8

ArrayList<Uri> imageUris = new ArrayList<Uri>();

imageUris.add(imageUri1); // Add your image URIs here

imageUris.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.."));

实现分享功能

上面说的都是怎么调用分享功能,以下就开始写怎么实现分享功能,让我们的应用也出现在分享列表中。前面也说了分享功能是使用隐式调用 Activtiy实现的,Activity需要声明 。

声明intent-filter

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<activity

android:name="com.example.sharedemo.ShareActivity"

android:label="@string/app_name" >

<intent-filter>

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

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

<data android:mimeType="image/*" />

</intent-filter>

<intent-filter>

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

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

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

</intent-filter>

<intent-filter>

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

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

<data android:mimeType="image/*" />

</intent-filter>

</activity>

上面声明了三种intent-filter,当然可以更多,这里只是举个例子,

处理接收数据

声明了intent-filter,响应的Activity就要处理响应的数据,示例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

public class ShareActivity extends Activity{

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

// Get intent, action and MIME type

Intent intent = getIntent();

String action = intent.getAction();

String type = intent.getType();

if (Intent.ACTION_SEND.equals(action) && type != null) {

if ("text/plain".equals(type)) {

handleSendText(intent); // Handle text being sent

} else if (type.startsWith("image/")) {

handleSendImage(intent); // Handle single image being sent

}

} else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {

if (type.startsWith("image/")) {

handleSendMultipleImages(intent); // Handle multiple images being sent

}

} else {

// Handle other intents, such as being started from the home screen

}

}

void handleSendText(Intent intent) {

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

String sharedTitle = intent.getStringExtra(Intent.EXTRA_TITLE);

if (sharedText != null) {

// Update UI to reflect text being shared

}

}

void handleSendImage(Intent intent) {

Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);

if (imageUri != null) {

// Update UI to reflect image being shared

}

}

void handleSendMultipleImages(Intent intent) {

ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);

if (imageUris != null) {

// Update UI to reflect multiple images being shared

}

}

}

通过声明intent-filter,处理接受到的数据就能完成分享的接收功能。

赞助本站

人工智能实验室

相关热词: 分享 Android

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港