Android应用中使用及实现系统“分享”接口实例

 更新时间:2016年12月17日 10:57:27   作者:xyz_lmn  
为了应用的推广、传播,很多的应用中都有“分享”功能,这篇文章主要介绍了Android应用中使用及实现系统“分享”接口实例,有兴趣的可以了解一下。

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

调用分享功能

1、分享文本

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

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() , 这样能一直显示分享选择列表,并且修改了分享列表标题内容。

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")这一项设置了内容类型。可也以是其他类型,需要接受方支持。

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、分享图片列表

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

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> 。

声明intent-filter

<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就要处理响应的数据,示例如下:

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 api的升级,也出现了一些新的完成“分享”功能的方法,比如 ShareActionProvider ,更多请参考

demo下载:demo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解Android JS相互调用

    详解Android JS相互调用

    这篇文章主要为大家介绍了Android与JS两者之间的相互调用,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • Flutter开发实现底部留言板

    Flutter开发实现底部留言板

    这篇文章主要为大家详细介绍了Flutter开发实现底部留言板,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Android开源组件小结

    Android开源组件小结

    Android自带的组件比较丑陋(个人感觉),自己写组件比较复杂,而且必须熟悉android应用层开发的一些机制,如绘制、回调,所以非迫不得已的情况下还是不要自己写组件,因为怕考虑不周全导致譬如性能或异常方面的问题,你自己写也会耗费不少时间
    2013-02-02
  • Android开发之使用ViewPager实现图片左右滑动切换效果

    Android开发之使用ViewPager实现图片左右滑动切换效果

    这篇文章主要介绍了Android开发之使用ViewPager实现图片左右滑动切换效果的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • Android SlidingMenu使用和示例详解

    Android SlidingMenu使用和示例详解

    这篇文章主要介绍了Android SlidingMenu使用和示例详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • Android IdleHandler基本使用及应用案例详解

    Android IdleHandler基本使用及应用案例详解

    这篇文章主要为大家详细介绍了Android IdleHandler的基本使用及应用案例,文中的示例代码讲解详细,具有一定的参考价值,需要的可以参考一下
    2022-10-10
  • Android第三方微信支付教程

    Android第三方微信支付教程

    这篇文章主要为大家详细介绍了Android第三方微信支付教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Android WorkManager实现后台定时任务流程详解

    Android WorkManager实现后台定时任务流程详解

    WorkManager是Android Jetpack的一个强大的组件,用于处理后台耗时任务。后台任务可以是一次性的,也可以是重复的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • Android Activity活动页面跳转与页面传值

    Android Activity活动页面跳转与页面传值

    大家好,本篇文章主要讲的是Android Activity活动页面跳转与页面传值,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Android多种方式实现相机圆形预览的示例代码

    Android多种方式实现相机圆形预览的示例代码

    这篇文章主要介绍了Android多种方式实现相机圆形预览的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08

最新评论