android 剪切板广播发送者,Android使用剪切板传递数据

Android使用剪切板传递数据

发布时间:2020-08-30 14:15:07

来源:脚本之家

阅读:62

作者:Ben_love_Nicole

在Activity之间传递数据还可以利用一些技巧,不管windows还是Linux操作系统,都会支持一种叫剪切板的技术,也就是某一个程序将一些数据复制到剪切板上,然后其他的任何程序都可以从剪切板中获取数据,在Android系统中也存在此技术。

使用剪切板会用到,ClipboardManager对象,这个对用剪切板会用到,ClipboardManager象用来操作剪切板,但是没有提供public的构造函数(单例模式),需要使用Activity.getSystemService(Context.CLIPBOARD_SERVICE)获取该对象。

在Android-11(Android 3.0)版本之前,利用剪切板传递数据使用setText()和getText()方法,但是在此版本之后,这两个方法就被弃用,转而使用传递ClipData对象来代替。相对于getText和setText而言,利用ClipData对象来传递数据,更符合面向对象的思想,而且所能传递的数据类型也多样化了。

主要步骤:

通过getSystemService获取ClipboardManager对象cm。

使用cm.setPrimaryClip()方法设置ClipData数据对象。

在新Activity中获取ClipboardManager对象cm。

使用cm.getPrimaryClip()方法获取剪切板的ClipData数据对象,cd。

通过cd.getItemAt(0)获取到传递进来的数据。

示例代码

保存数据:

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button btn=(Button)findViewById(R.id.btn);

btn.setOnClickListener(new View.OnClickListener() {

@SuppressLint("NewApi")

@Override

public void onClick(View v) {

//获取剪切板

ClipboardManager cm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);

cm.setPrimaryClip(ClipData.newPlainText("data", "Jack")); // 或分2步写 ClipData cd = ClipData.newPlain("label","Jack");cm.setPrimaryClip(cd);

Intent intent=new Intent(MainActivity.this,otherActivity.class);

startActivity(intent);

}

});

}

读取数据:

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.other);

ClipboardManager cm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);

ClipData cd=cm.getPrimaryClip();

String msg=cd.getItemAt(0).getText().toString();

TextView tv=(TextView)findViewById(R.id.msg);

tv.setText(msg);

}

以上方式使用剪切板传递的为String类型的数据,如果需要传递一个对象,那么被传递的对象必须可序列化,序列化通过实现Serializable接口来标记。

主要步骤:

创建一个实现了Serializable接口的类MyData。

存入数据:获取ClipboardManager,并对通过Base64类对MyData对象进行序列化,再存入剪切板中。

取出数据:在新Activity中,获取ClipboardManager,对被序列化的数据进行反序列化,同样使用Base64类。然后对反序列化的数据进行处理。

示例代码:

步骤一:

public class MyData implements Serializable {

private String name;

private int age;

public MyData(String name, int age) {

super();

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

步骤二:

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button btn=(Button)findViewById(R.id.btn);

btn.setOnClickListener(new View.OnClickListener() {

@SuppressLint("NewApi")

@Override

public void onClick(View v) {

//获取剪切板

ClipboardManager cm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);

MyData mydata=new MyData("jack", 24);

String baseToString="";

ByteArrayOutputStream bArr=new ByteArrayOutputStream();

try

{

ObjectOutputStream oos=new ObjectOutputStream(bArr);

oos.writeObject(mydata);

baseToString=Base64.encodeToString(bArr.toByteArray(), Base64.DEFAULT);

oos.close();

}

catch (Exception e)

{

e.printStackTrace();

}

cm.setPrimaryClip(ClipData.newPlainText("data",baseToString));

Intent intent=new Intent(MainActivity.this,otherActivity.class);

startActivity(intent);

}

});

}

步骤三:

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.other);

ClipboardManager cm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);

ClipData cd=cm.getPrimaryClip();

String msg=cd.getItemAt(0).getText().toString();

byte[] base64_btye=Base64.decode(msg, Base64.DEFAULT);

ByteArrayInputStream bais=new ByteArrayInputStream(base64_btye);

try {

ObjectInputStream ois=new ObjectInputStream(bais);

MyData mydata=(MyData)ois.readObject();

TextView tv=(TextView)findViewById(R.id.msg);

tv.setText(mydata.toString());

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

总结

综上所述,使用剪切板传递数据有利有弊,剪切板为Android系统管理的,所以在一个地方存入的数据,在这个Android设备上任何应用都可以访问的到,但是正是因为此设备访问的都是同一个剪切板,可能会导致当前程序存入的数据,在使用前被其他程序覆盖掉了,导致无法保证正确获取数据。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】 国家开放大学2020年春季 2411中国现代文学 参考试题

试卷代号:2422 2 0 2 0年春季学期期末统一考试 汽车发动机构造与维修 试题 2020年7月 一、单项选择题(下列各题的备选答案中,只有一个选项是正确的,请把正确答案的序号填写在括号内。15小题,每小题2分,共30…

【渝粤教育】 国家开放大学2020年春季 2528监督学 参考试题

试卷代号:2586 2 0 2 0年春季学期期末统一考试 城市轨道交通车站设备 试题 2020年7月 一、单项选择题(下列选项中只有一项是正确答案,请将正确选项的序号字母填入括号中。每小题2分,共20分) 1.城市轨道交通线路按其空间…

非网管交换机和网管交换机的区别

交换机可以分为网管型交换机以及非网管交换机,那么,对于非网管交换机和网管交换机你是否有过详细了解呢?非网管交换机和网管交换机二者之间有何区别呢?接下来我们就跟随飞畅科技的小编一起来详细了解下吧! 什么叫非网…

android 自定义baseadapter listview,android之ListView和BaseAdapter的组合使用

BaseAdapter是基本适配器,功能强大,凡是能用ArrayAdapter和SimpleAdapter解决的,都可以使用BaseAdapter解决。BaseAdapter是一个抽象类,所以需要自定义一个类来继承BaseAdapter。BaseAdapter中所必须重写的方法的意义:…

【渝粤教育】 国家开放大学2020年春季 2710蔬菜栽培技术 参考试题

试卷代号:2718 2 0 2 0年春季学期期末统一考试 动物生理基础 试题 2020年7月 一、单项选择题(共15分,每小题3分) 1.营养物质分解产物的主要吸收部位在( )。 A.食管 B.胃 C.小肠 D&am…

【渝粤教育】 国家开放大学2020年春季 2772家畜环境卫生与设施 参考试题

试卷代号:2776 座位号口口 2 0 2 0年春季学期期末统一考试 兽医基础 试题 2020年7月 一、单项选择题(每题3分,共60分) 1.局部贫血病理变化特征之一是( )。 A.发红 B.水肿 C.发凉 D&a…

构建器模式_我喜欢构建器模式的三个原因

构建器模式有三种方法可以用Java编程语言创建新对象: 伸缩构造函数(反)模式 Javabeans模式 建造者模式 与其他两种方法相比,我更喜欢使用构建器模式。 为什么? Joshua Bloch描述了构建器模式以及在Effective Jav…

如何分辨PoE工业交换机是否标准供电

要了解如何分辨出一台PoE交换机/PoE工业交换机是否是标准PoE供电,首先得要弄清楚什么是PoE交换机/PoE工业交换机。接下来我们就跟随飞畅科技的小编一起来详细了解下吧! PoE供电交换机是指能够通过网线为远端受电终端提供网络供电的交换机,包…

android 蒙层广告1,subnvue安卓机打开只显示蒙层,没有任何内容【报Bug】

详细问题描述subnvue子窗体,在iphone上测试正常,而在安卓手机测试出现打开只有一个灰色蒙层,没有任何内容。经过调试之后发现:"style": {"top": "0px","bottom": "0px","…

【渝粤教育】 国家开放大学2020年春季 3956★汽车故障诊断技术 参考试题

试卷代号:3979 座位号 2 0 2 0年春季学期期末统一考试 会计学概论 试题 2020年7月 一、单项选择题(在下列各题的备选答案中选择一个正确的,并将其序号字母填入题中的括号里,每小题2分,共20分) 1&#xff0e…

【渝粤教育】 国家开放大学2020年春季 1007公司财务 参考试题

试卷代号:1013 2 0 2 0年春季学期期末统一考试 金融统计分析 试题(开卷) 2020年7月 一、单项选择题(每小题2分,共40分。每小题有一项答案正确,请将正确答案的序号填在括号内) 1.中央…

工业交换机出现故障问题排查步骤详解

工业交换机虽然说具有电信级性能特征,可耐受严苛的工作环境,但是其运行中出现故障问题是不可避免的,当工业交换机出现故障后应当迅速地进行处理,尽快查出故障点,排除故障。在遇到故障分析较复杂时,必须先从…

layui datetimepicker 只日期范围到当前时间的前一天_浪琴手表如何正确调整日期?手表调日期的方法...

浪琴手表怎么样?先看下品牌知识浪琴表起源于1832年,由一位年青商人Auguste Agassiz创办。他以自己的名字在瑞士Saint-Imier开始经营钟表生意,其后,他的侄儿Ernest Francillon巧妙地把其业务拓展为较具规模的钟表公司,于1866年在瑞…

android studio ignore 模板,android studio git ignore

android studio 集成的git图形界面并不灵敏,希望更依赖shell命令1.该项目已有git仓库,打算换地址,或者重新做git命令.删除当前项目app文件夹下.git文件* 打开项目,进入Terminal命令行* git init 初始化当前项目本地仓库* 在APP文件夹下,打开.gitignore文件,书写以下内容# built…

【渝粤教育】 国家开放大学2020年春季 1013金融统计分析 参考试题

试卷代号:1020 2 0 2 0年春季学期期末统一考试 国际私法 试题 2020年7月 一、单项选择题(每题2分,共20分,每题只有一项答案正确,请将正确答案的序号填在括号内) 1.法律的域外效力也称为( &#…

尚未提交线上版本_ABRSM 线上演奏考试报名指引(目前考试仅限英国 amp; 部分国家及地区)...

昨天,ABRSM英国公布了2021年英国本土和亚洲部分地区演奏、乐理的“线上、线下”报名及考试时间,虽然中国大陆的考试时间为“待定”状态,但为了满足考生和家长了解线上演奏考试报名流程,今天我们就为大家作一个详尽的线上考试报名指…

【渝粤教育】 国家开放大学2020年春季 1021劳动与社会保障法 参考试题

试卷代号:1026 座位号□□ 2 0 2 0年春季学期期末统一考试 西方经济学(本) 试题 2020年7月 一、单项选择题(每题2分,共30分,请将你认为的正确答案的序号填入该题后的括号内) 1.-般来…

关于以太网光纤收发器,逻辑隔离与物理隔离的理解与区别

现如今,随着以太网的广泛应用,在很多领域,比如说电力、银行、公安、部队、铁路、大型企事业单位专网有广泛物理隔离的以太网接入需求,但是什么是物理隔离以太网呢?什么又是逻辑隔离以太网呢?我们该如何判断…

android studio zlib,在Android Studio 3.1中构建项目时出现“压缩执行失败”错误

我正在尝试在Android Studio 3.1预览版中构建https://github.com/neural-nuts/Cam2Caption,但是我使用的是很旧的build.gradle,或者它死于Error:Execution failed for task :Application:packageDebug.Execution of compression failed.在清理项目或重建…

【渝粤教育】 国家开放大学2020年春季 1039高级财务会计 参考试题

试卷代号:1044 座位号 2 0 2 0年春季学期期末统一考试 合同法 试题 2020年7月 一、单项选择题(每小题1分,共10分。在每小题的四个备选答案选出一个正确的答案,请将正确答案的序号填在括号内) 1.合同根据其成…