Android定义自己的面板共享系统
在Android分享知道有一个更方便的方法。调用的共享面板来分享我们的应用程序的系统。主要实现例如,下面的:
- public Intent getShareIntent(){
- Intent intent = new Intent();
- intent.setAction(Intent.ACTION_SEND);
- intent.putExtra(Intent.EXTRA_TEXT, "这是測试分享面板, http://www.baidu.comss");
- intent.setType("text/plain");
- return intent;
- }
另一种是实如今ActionBar上加入分享列表,实现代码例如以下:
- <?xml version="1.0" encoding="utf-8"?>
- <menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:id="@+id/menu_item_share"
- android:showAsAction="ifRoom"
- android:title="Share"
- android:actionProviderClass="android.widget.ShareActionProvider" />
- </menu>
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.actionbar_menu, menu);
- MenuItem item = menu.findItem(R.id.menu_item_share);
- shareActionProvider = (ShareActionProvider) item.getActionProvider();
- Intent shareIntent = getShareIntent();
- shareActionProvider.setShareIntent(shareIntent);
- return true;
- }
- public Intent getShareIntent(){
- Intent intent = new Intent();
- intent.setAction(Intent.ACTION_SEND);
- intent.putExtra(Intent.EXTRA_TEXT, "这是測试分享面板, http://www.baidu.comss");
- intent.setType("text/plain");
- return intent;
- }
系统默认会为我们找出全部支持seteType中类型的应用。相同我们能够实现自己定义分享的平台。
- private void initShareIntent() {
- Intent intent = new Intent(Intent.ACTION_SEND);
- intent.setType("text/plain");
- List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(
- intent, 0);
- if (!resInfo.isEmpty()) {
- List<Intent> targetedShareIntents = new ArrayList<Intent>();
- for (ResolveInfo info : resInfo) {
- Intent targeted = new Intent(Intent.ACTION_SEND);
- targeted.setType("text/plain");
- ActivityInfo activityInfo = info.activityInfo;
- //在这里能够加入对应的平台。用 || 连接
- if (activityInfo.packageName.contains("com.tencent.mm")) {
- targeted.putExtra(Intent.EXTRA_TEXT, "分享内容");
- targeted.setPackage(activityInfo.packageName);
- targetedShareIntents.add(targeted);
- }
- }
- Intent chooserIntent = Intent.createChooser(
- targetedShareIntents.remove(0), "Select app to share");
- if (chooserIntent == null) {
- return;
- }
- chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
- targetedShareIntents.toArray(new Parcelable[] {}));
- try {
- startActivity(chooserIntent);
- } catch (android.content.ActivityNotFoundException ex) {
- Toast.makeText(this, "Can't find sharecomponent to share",
- Toast.LENGTH_SHORT).show();
- }
- }
- }
系统的分享面板存在一些缺陷,比方每一个手机显示的面板的样式不同,不同手机上显示的分享平台种类和数目不同,会出现一些杂乱的应用。我们能够给上面的方法加入參数,让仅仅能分享到一个平台就能够解决问题。这样我们就能够自己定义一个分享面板。来加入我们想要的应用,代码例如以下:
- private void initShareIntent(String type) {
- boolean found = false;
- Intent share = new Intent(android.content.Intent.ACTION_SEND);
- share.setType("image/*");
- // gets the list of intentsthat can be loaded.
- List<ResolveInfo> resInfo =getPackageManager().queryIntentActivities(
- share, 0);
- if (!resInfo.isEmpty()) {
- for (ResolveInfo info : resInfo) {
- if (info.activityInfo.packageName.toLowerCase().contains(type)
- || info.activityInfo.name.toLowerCase().contains(type)) {
- share.putExtra(Intent.EXTRA_SUBJECT, "subject");
- share.putExtra(Intent.EXTRA_TEXT, "your text");
- //share.putExtra(Intent.EXTRA_STREAM,
- // Uri.fromFile(newFile(myPath))); // Optional, just
- // // if you wanna
- // // share an
- // // image.
- share.setPackage(info.activityInfo.packageName);
- found = true;
- break;
- }
- }
- if (!found)
- return;
- startActivity(Intent.createChooser(share, "Select"));
- }
- }
Android定义自己的面板共享系统的更多相关文章
- android 21 隐式意图启动系统预定义activity
Intent intent=new Intent(LoginActivity.this, MainActivity.class);//显示意图启动,显示从一个activity到另一个activity, ...
- Android融合推送MixPush SDK集成多家推送平台,共享系统级推送,杀死APP也能收到推送
消息推送是App运营的重要一环,为了优化消息推送成功率,降低电量和流量消耗,系统级的推送服务显得尤为重要.小米和魅族由此推出了自家的推送平台,在MIUI和Flyme上共享系统级推送服务,让APP在被杀 ...
- Android手机如何通过USB共享网络给Mac?
最近网络挂了,mac不能上网查资料,心情非常毛躁,急切寻求用mac蹭WiFi的方法. 没有找到电脑端破解WiFi密码的软件,手头的Android手机没有root,也无法查看WiFi密码--->破 ...
- Android应用程序框架层和系统运行库层日志系统源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6598703 在开发Android应用程序时,少 ...
- Android震动vibrator(马达)--系统到驱动的流程【转】
本文转载自:https://blog.csdn.net/tianshiyalin/article/details/17136723 一.前言 本人刚学习安卓驱动开发,水平不能说菜,是根本没有水平,在这 ...
- Android自定义日历控件(继承系统控件实现)
Android自定义日历控件(继承系统控件实现) 主要步骤 编写布局 继承LinearLayout设置子控件 设置数据 继承TextView实现有圆圈背景的TextView 添加Attribute 添 ...
- Android定义的路径全局变量
Android定义的路径全局变量 ifeq (,$(strip $(OUT_DIR))) OUT_DIR := $(TOPDIR)out endif DEBUG_OUT_DIR := $(OUT_DI ...
- Android 通过应用程序来设置系统的日期和时间中的
Android 通过应用程序来设置系统的日期和时间中的 android 2.3 android 4.0 测试可行,刚需ROOT权限. import java.io.DataOutputStream; ...
- Android模拟、实现、触发系统按键事件的方法
Android模拟.实现.触发系统按键事件的方法 /** * 模拟系统按键. * * @param keyCode */ public static void onKeyEvent(final ...
随机推荐
- Java实现定时任务的三种方法(转)
在应用里经常都有用到在后台跑定时任务的需求.举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据.文件等.在本文里,我会给大家介绍3种不同的实现方法: 普通thread实现 Tim ...
- MySQL :: MySQL 5.0 Reference Manual :: 14.4 The MEMORY (HEAP) Storage Engine
MySQL :: MySQL 5.0 Reference Manual :: 14.4 The MEMORY (HEAP) Storage Engine The MEMORY (HEAP) Stora ...
- HDU 4981 Goffi and Median(水)
HDU 4981 Goffi and Median 思路:排序就能够得到中间数.然后总和和中间数*n比較一下就可以 代码: #include <cstdio> #include <c ...
- C++中的常对象和常对象成员
常对象 常对象必须在定义对象时就指定对象为常对象. 常对象中的数据成员为常变量且必须要有初始值,如 Time const t1(12,34,36); //定义t1为常对象 这样的话,在所有的场合中,对 ...
- C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)
本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...
- HDU4869:Turn the pokers(费马小定理+高速幂)
Problem Description During summer vacation,Alice stay at home for a long time, with nothing to do. S ...
- ExtJs4 笔记(3) Ext.Ajax 对ajax的支持
本篇主要介绍一下ExtJs常用的几个对JS语法的扩展支持,包括Ajax封装,函数事件操作封装,还有扩展的常用函数等.Ajax服务端交互式操作是提交到.NET MVC.后续服务端交互都采用这一方式实现. ...
- 使用Xcode无法发布程序(Archive按钮一直为灰色不可点击)
问题现象:想在Xcode中把代码编译发布成ipa程序,但“Product”->“Archive”按钮一直不可使用. 解决办法:目前的运行配置是使用模拟器,改成“iOS Device”即可 ...
- Swift - 按钮(UIButton)的用法
1,按钮的创建 (1)按钮有下面四种类型: UIButtonType.ContactAdd:前面带“+”图标按钮,默认文字颜色为蓝色,有触摸时的高亮效果 UIButtonType.DetailDisc ...
- hdu 2147 SG函数打表(手写也可以) 找规律
kiki's game Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 40000/1000 K (Java/Others) Total ...