iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >android如何实现系统分享的自定义功能
  • 186
分享到

android如何实现系统分享的自定义功能

android 2023-05-30 21:05:03 186人浏览 安东尼
摘要

小编给大家分享一下Android如何实现系统分享的自定义功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!分享功能是app中特别常见的功能,国内的app基本都支持分享到微信 QQ等主流的社交应用。至于分享功能的实现大多是使

小编给大家分享一下Android如何实现系统分享的自定义功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

分享功能是app中特别常见的功能,国内的app基本都支持分享到微信 QQ等主流的社交应用。至于分享功能的实现大多是使用第三方的share sdk一步到位,或者分享的app比较少比如就一个微信 那通常使用微信sdk的分享模块即可。但其实android系统就给我们提供过一种分享的实现方式,代码也比较简单如下

Intent share = new Intent(Intent.ACTioN_SEND);    share.setType("text/plain");    share.putExtra(Intent.EXTRA_TEXT, shareText);    share.putExtra(Intent.EXTRA_SUBJECT, shareSubject);    if (uri != null) {      share.setType("image/*");      share.putExtra(Intent.EXTRA_STREAM, uri);    }    context.startActivity(Intent.createChooser(share, title));

android如何实现系统分享的自定义功能

系统提供的短短不到十行代码,将分享列表 数据 展示 点击 跳转 跳转后分享内容的分享等一系列动作都集合完成了。这样确实给人干净利索的感觉,但随之问题也来了比如我分享列表中只有特定几个app,甚至把某个app放在第一个,还有点击Facebook的分享后分享方式我想用facebooksdk自带的,等等一些列自定义功能完成就比较麻烦。

对个别app的分享特别处理

从以上的代码可以看出,Google官方定义出分享的key value一一对应规则。比如Intent.EXTRA_STREAM对应为分享图片的uri,Intent.EXTRA_TEXT对应为分享的text文本。从道理上讲如果分享到的app都遵循google定义的这规则我们就能通过官方这代码实现分享到所有app的功能。然而理想很丰满现实很骨感,比如我们项目中要求分享到的facebook就压根不遵守这规则,我们想实现分享到Facebook就必须用其sdk实现。于是我们就需要在分享列表中点击Facebook是单独走Facebook的分享逻辑。

  • 常规思维这是一个列表,我们监听列表item的点击事件即可,然而从实现该分享列表的代码 可以看出没有类似listview recyclerview控件,也没有adapter,扒了下源码和google找不到item的点击事件的监听,故该方案放弃了

  • 所以只能采用了自己实现分享列表,然后监听分享列表item点击事件单独处理的方式,也是符合常规思路

获取分享列表的数据

private static List<List<ResolveInfo>> getShaReactivities() {    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);    sharingIntent.setType("text/plain");    PackageManager pm = App.getInstance().getPackageManager();    List<List<ResolveInfo>> listArrayList = new ArrayList<>();    List<ResolveInfo> activityList = pm.queryIntentActivities(sharingIntent, 0);    List<ResolveInfo> newActivityList = new ArrayList<>();    for (Iterator<ResolveInfo> it = activityList.iterator(); it.hasNext(); ) {      ResolveInfo info = it.next();      //过滤出facebook google+ whatapp twitter 分享app单独处理      LogUtils.e("+++", info.activityInfo.packageName);      if (info.activityInfo.packageName.equals("com.android.bluetooth") || info.activityInfo.packageName.equals("com.android.nfc") || info.activityInfo.packageName.equals("com.facebook.katana") || info.activityInfo.packageName.equals("com.google.android.apps.plus") || info.activityInfo.packageName.equals("com.facebook.orca") || info.activityInfo.packageName.contains("whatsapp") || info.activityInfo.packageName.equals("com.twitter.android")) {        if (info.activityInfo.packageName.equals("com.android.bluetooth") || info.activityInfo.packageName.equals("com.android.nfc")) {          it.remove();        } else {          newActivityList.add(info);          it.remove();        }      }    }    //增加一条other数据    newActivityList.add(null);    listArrayList.add(newActivityList);    listArrayList.add(activityList);    return listArrayList;  }

构建分享的列表,且定义点击事件等

public static void systemShareDialog(List<ResolveInfo> packages, Context context, String title, String shareText) {    List<Intent> targetIntents = new ArrayList<Intent>();    Intent shareIntent = new Intent(Intent.ACTION_SEND);    shareIntent.setType("text/plain");    SPM spm = new SPM();    for (ResolveInfo candidate : packages) {      String packageName = candidate.activityInfo.packageName;      Intent target = new Intent(android.content.Intent.ACTION_SEND);      target.setType("text/plain");      target.putExtra(Intent.EXTRA_TEXT, shareText);      //target.setPackage(packageName);      //t will be able to handle the case of multiple activities within the same app that can handle this intent. Otherwise, a weird item of "Android System" will be shown      target.setComponent(new ComponentName(packageName, candidate.activityInfo.name));      targetIntents.add(target);    }//    createchooser时使用targetIntents.remove(0)即传入targetIntents的第一个intent,并将其移除,////    否则执行chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[] {}));添加后启动时会出现两个相同的应用    Intent chooserIntent = Intent.createChooser(targetIntents.remove(0), title);    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[]{}));    context.startActivity(chooserIntent);  }

看完了这篇文章,相信你对“android如何实现系统分享的自定义功能”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: android如何实现系统分享的自定义功能

本文链接: https://www.lsjlt.com/news/221670.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • android如何实现系统分享的自定义功能
    小编给大家分享一下android如何实现系统分享的自定义功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!分享功能是app中特别常见的功能,国内的app基本都支持分享到微信 QQ等主流的社交应用。至于分享功能的实现大多是使...
    99+
    2023-05-30
    android
  • android分享功能如何实现
    实现Android分享功能可以使用Android系统提供的分享功能,具体步骤如下:1. 创建一个分享的按钮或菜单项,例如在布局文件中...
    99+
    2023-10-09
    android
  • Android自定义View实现时钟功能
    最近在练习自定义view, 想起之前面试的时候笔试有道题是写出自定义一个时钟的关键代码. 今天就来实现一下. 步骤依然是先分析, 再上代码. 实现效果 View分析 时钟主要分为五...
    99+
    2024-04-02
  • 如何在Android应用中调用系统自带的分享功能
    本篇文章给大家分享的是有关如何在Android应用中调用系统自带的分享功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现分享功能的几个办法调用系统的分享功能通过第三方SDK...
    99+
    2023-05-31
    android roi
  • Android如何实现自定义View展开菜单功能
    这篇文章主要为大家展示了“Android如何实现自定义View展开菜单功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android如何实现自定义View展开菜单功能”这篇文章吧。效果图思路下...
    99+
    2023-05-31
    android view
  • ThinkPHP5集成JS-SDK实现微信自定义分享功能
    微信链接分享给好友时能够自定义标题、简介和logo,现将ThinkPHP5集成JS-SDK实现微信自定义分享功能的过程整理成文。 Jssdk类库 1、文件名及位置 名字:Jssdk....
    99+
    2023-03-11
    ThinkPHP5集成JS-SDK实现微信自定义分享功能 微信自定义分享功能
  • Android自定义Camera实现拍照小功能
    本文实例为大家分享了Android自定义Camera实现拍照的具体代码,供大家参考,具体内容如下 本篇文章就项目开发遇到问题记录下; 1.拍照图片被压缩问题2.拍照图片被旋转问题 首...
    99+
    2024-04-02
  • Android自定义View如何实现QQ运动积分转盘抽奖功能
    这篇文章主要讲解了Android自定义View如何实现QQ运动积分转盘抽奖功能,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。因为偶尔关注QQ运动, 看到QQ运动的积分抽奖界面比较有意思,所以就尝试用自定义Vie...
    99+
    2023-05-30
    android view roi
  • Android实现自定义带删除功能的EditText实例
    1.说明自定义带删除功能的EditText有两种方法,第一种是用组合视图的方法,即在一个view视图里面左侧放置一个EditText,右侧放置一个ImageView,但是这样增加了视图的层次,而且对输入内容的长度要做一定的处理。第二种是重新...
    99+
    2023-05-31
    android edittext roi
  • Android自定义View实现简易画板功能
    本文实例为大家分享了Android自定义View实现简易画板的具体代码,供大家参考,具体内容如下 自定义VIew实现简易画板效果,功能包括清空、选择颜色,选择大小,效果如下 画板布...
    99+
    2024-04-02
  • javascript如何实现自定义事件功能
    这篇文章主要介绍了javascript如何实现自定义事件功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。概述自定义事件很难派上用场?为什么...
    99+
    2024-04-02
  • 在Android项目中如何调用系统的分享功能
    在Android项目中如何调用系统的分享功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体如下:public class ShareActivity ext...
    99+
    2023-05-31
    android roi
  • ThinkPHP5怎么集成JS-SDK实现微信自定义分享功能
    今天小编给大家分享一下ThinkPHP5怎么集成JS-SDK实现微信自定义分享功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2023-07-05
  • Android 自定义图片地图坐标功能的实现
    一、前言 最近项目要求实现一个在自定义地图图片上添加坐标信息的功能,类似于在图片做标注的功能。如下图所示。坐标的位置是相对于图片宽高的百分比 二、思路 改功能主要分为三个视图,1...
    99+
    2024-04-02
  • Android怎么自定义Camera实现拍照小功能
    这篇文章主要介绍“Android怎么自定义Camera实现拍照小功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android怎么自定义Camera实现拍照小功能”文章能帮助大家解决问题。首先实现...
    99+
    2023-06-30
  • Android Compose自定义TextField如何实现自定义的输入框
    这篇文章主要介绍Android Compose自定义TextField如何实现自定义的输入框,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!简单自定义BasicTextField示例代码 var&n...
    99+
    2023-06-29
  • Android编程实现自定义ImageView圆图功能的方法
    本文实例讲述了Android编程实现自定义ImageView圆图功能的方法。分享给大家供大家参考,具体如下:首先很感谢开源项目Universal Image Loader图片加载框架。之前也看过一段时间框架源码,但是却没有时间进行知识点的总...
    99+
    2023-05-30
    android 自定义 imageview
  • Android怎么自定义View实现简易画板功能
    这篇文章主要介绍“Android怎么自定义View实现简易画板功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android怎么自定义View实现简易画板功能”文章能帮助大家解决问题。自定义VIe...
    99+
    2023-06-30
  • Android自定义控件实现九宫格解锁功能
    最终Android九宫格解锁效果如下进行定义实体point点public class Point { private float x; private float y; //正常模式 public static final int NORM...
    99+
    2023-05-31
    android 九宫格 解锁
  • Android如何实现自定义Dialog的大小
    小编给大家分享一下Android如何实现自定义Dialog的大小,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:Android应用开发中,无论是出于功能还...
    99+
    2023-05-30
    android dialog
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作