谨记(指定选择器Intent.createChooser())

开始今天的内容前,先闲聊一下:
(1)突然有一天头脑风暴,对很多问题有了新的看法和见解,迫不及待的想要分享给大家,文档已经写好了,我需要通过微信或者QQ,短信等社交工具发送给大家。
(2)在网上发现一段特别好的文章,想要保存收藏下来。
上面描述了进入智能手机时代后,我们经常遇到的两种情况,那么作为开发者的我们如何让自己开发的APP实现这两种功能呢,下面我们以实现文本的发送分享以及接收来梳理下两种功能的实现过程(其他类型的数据在博文末尾会给大家做简单介绍)。
第一种情况:APP实现发送分享文本功能
在实现APP发送与分享的功能时,根据是否指定选择器Intent.createChooser(),会有两种不同的实现效果。
(1)指定选择器的实现效果如下:
每次需要发送分享的时候,都会弹出所有具有分享功能的APP供选择。(个人认为很人性化)
(2)未指定选择器的实现效果如下:
图中演示测试使用的安卓原生系统,在未设置选择器的时候,每次会提醒用户使用当前APP提交发送分享所使用的APP仅使用一次还是始终都使用(经测试万一大家手滑,误点了“始终”,那么好吧,如果下次想换其他APP分享内容时,除非你卸载重装当前APP);但在其他一些安卓定制系统的品牌手机上测试时,发现仅第一次会跳出所有具有发送分享功能的APP供你选择(但是不会提示你仅使用一次还是始终),一旦选择后,后果与在原生系统上点击始终的效果相同。立马卸载APP的心都有了。
好了,实现效果大家都看到了,我们开始撸一把代码吧:
第一步:Layout中界面布局文件activity_main.xml文件(文本编辑框以及按钮):
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.administrator.sendshare.MainActivity"> <EditText android:id="@+id/et" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="想给潘侯爷说点什么"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="sendtext" android:text="发送文本" /> </LinearLayout>
第二步:Java中实现代码MainActivity.java功能实现代码:
注意注意:指定选择器啊
public class MainActivity extends AppCompatActivity {
EditText et;//声明文本编辑框
String str;//声明字符串,用于获取文本编辑框内的内容
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取文本框
et = (EditText) findViewById(R.id.et);
}
//创建方法将输入的内容发出去
public void sendtext(View view){
str=et.getText().toString();
Intent intent = new Intent();
/*设置action为发送分享,
*并判断要发送分享的内容是否为空
*/
intent.setAction(Intent.ACTION_SEND);
if(str!=null){
intent.putExtra(Intent.EXTRA_TEXT,str);
}else{
intent.putExtra(Intent.EXTRA_TEXT,"");
}
intent.setType("text/plain");//设置分享发送的数据类型
//未指定选择器,部分定制系统首次选择后,后期将无法再次改变
// startActivity(intent);
//指定选择器选择使用有发送文本功能的App
startActivity(Intent.createChooser(intent,getResources().getText(R.string.app_name)));
}
}
第二种情况:APP实现接收分享文本功能
实现效果如下(将短信内容分享到我们的APP上):
layout布局界面为初始默认,仅一个默认helloworld的TextView界面,这里就省略不写了。
第一步:AndroidMainfest.xml配置文件(添加接收文本所需的action等intent属性)
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.administrator.test" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> //添加接收文本用的action,category,mimeType <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
第二步:Java中实现代码MainActivity.java功能实现代码
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
//获取intent
Intent intent =getIntent();
String action = intent.getAction();
String type = intent.getType();
//设置接收类型为文本
if (Intent.ACTION_SEND.equals(action) && type != null){
if ("text/plain".equals(type)) {
handlerText(intent);
}
}
}
//该方法用于获取intent所包含的文本信息,并显示到APP的Activity界面上
private void handlerText(Intent intent) {
String data = intent.getStringExtra(Intent.EXTRA_TEXT);
tv.setText(data);
}
}
额外补充:
设置更新桌面背景,核心代码如下:
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
}
public void select(View view){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SET_WALLPAPER);
startActivity(Intent.createChooser(intent,getResources().getText(R.string.app_name)));
// startActivity(intent);
}
}
以二进制的形式分享发送图片,核心代码如下:
public void sendimage(View view) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse(Environment.getExternalStorageDirectory()+"/DCIM/Camera/20161204_195228.jpg"));
intent.setType("image/*");
// startActivity(intent);
startActivity(Intent.createChooser(intent,getResources().getText(R.string.app_name)));
}
发送分享多张图片,核心代码如下:
public void sendimages(View view) {
ArrayList<Uri> uris = new ArrayList<>();
//演示发送两张图片
uris.add(Uri.parse(Environment.getExternalStorageDirectory()+"/DCIM/Camera/20161204_195228.jpg"));
uris.add(Uri.parse(Environment.getExternalStorageDirectory()+"/DCIM/Camera/20161204_195155.jpg"));
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,uris);
intent.setType("image/*");
// startActivity(intent);
startActivity(Intent.createChooser(intent,getResources().getText(R.string.app_name)));
}
今天到这了,有问题欢迎评论讨论,晚安喽!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# Android
# 文本内容
# 分享
# 发送
# 接收
# Android实现QQ的第三方登录和分享
# Android使用友盟集成QQ、微信、微博等第三方分享与登录方法详解
# Android实现第三方授权登录、分享以及获取用户资料
# Android 第三方登录、分享(ShareSDK、友盟)
# Android 第三方应用接入微信平台研究情况分享(二)
# Android 接收微信、QQ其他应用打开第三方分享功能
# 选择器
# 两种
# 好了
# 给大家
# 第二步
# 会有
# 大家都
# 首次
# 但在
# 所需
# 弹出
# 好吧
# 写了
# 会给
# 两张
# 重装
# 这两种
# 第二种
# 第一种
# 图中
相关文章:
已有域名和空间如何快速搭建网站?
如何在自有机房高效搭建专业网站?
学校建站服务器如何选型才能满足性能需求?
在线制作视频网站免费,都有哪些好的动漫网站?
内部网站制作流程,如何建立公司内部网站?
网站制作说明怎么写,简述网页设计的流程并说明原因?
已有域名如何快速搭建专属网站?
c# 服务器GC和工作站GC的区别和设置
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
家庭建站与云服务器建站,如何选择更优?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
如何选择靠谱的建站公司加盟品牌?
建站主机功能解析:服务器选择与快速搭建指南
已有域名和空间,如何快速搭建网站?
海南网站制作公司有哪些,海口网是哪家的?
名字制作网站免费,所有小说网站的名字?
公司门户网站制作流程,华为官网怎么做?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
如何用AWS免费套餐快速搭建高效网站?
,南京靠谱的征婚网站?
制作网页的网站有哪些,电脑上怎么做网页?
如何在建站之星绑定自定义域名?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
已有域名建站全流程解析:网站搭建步骤与建站工具选择
如何通过建站之星自助学习解决操作问题?
高端企业智能建站程序:SEO优化与响应式模板定制开发
Python如何创建带属性的XML节点
大连网站制作公司哪家好一点,大连买房网站哪个好?
建站之星云端配置指南:模板选择与SEO优化一键生成
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
微信小程序 五星评分(包括半颗星评分)实例代码
如何用好域名打造高点击率的自主建站?
如何配置WinSCP新建站点的密钥验证步骤?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
如何自定义建站之星网站的导航菜单样式?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
个人网站制作流程图片大全,个人网站如何注销?
如何高效完成自助建站业务培训?
建站主机选虚拟主机还是云服务器更好?
如何在IIS中配置站点IP、端口及主机头?
如何做静态网页,sublimetext3.0制作静态网页?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
如何在阿里云域名上完成建站全流程?
建站主机如何安装配置?新手必看操作指南
如何打造高效商业网站?建站目的决定转化率
建站之星图片链接生成指南:自助建站与智能设计教程
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
*请认真填写需求信息,我们会在24小时内与您取得联系。