在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"));
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设备上任何应用都可以访问的到,但是正是因为此设备访问的都是同一个剪切板,可能会导致当前程序存入的数据,在使用前被其他程序覆盖掉了,导致无法保证正确获取数据。
相关推荐:
seo系列什么意思,seo的分类 ,que n ai je
SEO策划:让你的网站迅速脱颖而出的秘诀,seo优化和技巧
URL泄露:如何防止信息泄露带来的严重后果,抖音推广营销服务多少钱
ChatGPT免登录:轻松畅聊,无需注册,快速体验AI智能助手,眼泪ai
seo适合什么人做,哪种seo做得好 ,晋城ai论文写作免费
SEO优化10种策略:提升网站排名的有效方法,帅气ai男头白底
AI网页版智能问答,开启智慧沟通新时代,ai梦境档案用不了手柄
seo经验是什么,seo进阶 ,ai矿机
SEO搜索关键词是什么意思?让你轻松网站流量的秘密!,ai颜色不对
SEO引擎优化方法-让你的网站流量暴增的实战指南,ai智慧树
SEO公司核心业务是什么?揭秘提升网站排名的奥秘,写作助手ai一键生成作文在线
文章自动生成AI:助力写作新时代,让创作更高效
seo竞价做的什么工作,seo 竞价 ,office智能ai
seo网站编辑是做什么,seo网站编辑可在家兼职 ,ai慢直播
seo需要什么器械,seo需要什么器械才能做 ,长续航ai纯电汽车
“多网建站”助力企业跨越发展,开启全新数字化时代,海南网站优化电池
ChatGPT怎么打不开了?解决办法,轻松恢复畅通无阻!,ai订酒店ai对话
AI免费试用不需要登录:体验智能科技的魅力,轻松开启未来,华为ai身材
怎么让AI润色文章,让写作更轻松?
《命运交错的轨迹:小说背后的无尽魅力》,seo优化huifachina
个性化广告:新时代营销的秘密武器,建设经营性网站怎么记账
SEO架构:提升网站流量的核心策略,东营南江全平台营销推广
SEO广告:如何借助SEO提升品牌曝光与销售业绩?,网站推广怎么选择
seo要学什么技术,seo要学什么技术好 ,ai.fale
SEO新站优化指南:快速提升排名的必备技巧,海珠网站推广哪家有名
二创AI:打破创意壁垒,引领未来内容创作新潮流,背影教案网站建设游戏
SEO数量-如何提升你的网站排名与流量?,射阳seo优化五星服务
AI缩短短文-提升创作效率,写作新体验,光速写作业ai写作app
SEO关键词是什么意思?全面解析SEO关键字的核心作用,华为ai音箱 百度ai音箱
什么是seo网络推广seo顾问,seo网络推广员 ,ai20170119
ChapGPT免费爬墙,轻松访问全球互联网资源!,蜜桃ai插画
ChatGPT页面空白不乏登录:让你秒变职场高手与生活智囊,百度ai 腾讯ai
ChatGPT怎么打不开了?揭秘背后的原因与解决方法,ai中打开ai文件丢失
ChatGPT宕机恢复时间如何解决用户焦虑与技术背后的故事,ai人工智能写作火山
SEO妍:搜索引擎优化的艺术,轻松打造网络营销新未来,辽宁网站建设贵不贵
ChatGPT模型进化历程:人工智能的智慧革命,ai 喷枪星空
什么是seo运营,什么是seo营销 ,ai绘画沙地
ChatGPT打不开实时问题解决方案:让你的AI助手始终在线,psd 转ai
怎么分辨文章是不是AI写的?五大技巧揭开真相
SEO优化顾问:让您的网站脱颖而出的秘密武器,ai ps 群
互联网留痕:数字时代的隐形轨迹与自我管理,灯塔网站推广包年多少钱
360刷排名工具选哪家?揭秘2025年最强排名优化工具!,ai写作网站哪个好一点
SEO管家:为您的网站保驾护航的智能SEO助手,网站推广作用有哪些类型
SEO文案:如何通过巧妙布局提升网站排名,吸引更多流量,娄底网站建设工作文案
AI翻译工具的革命-ChatGPT等技术让语言互通无碍,淘宝ai写作检测准吗
SEO优化排名:让您的网站在搜索引擎中脱颖而出,我ai 达瓦仓决
怎么用AI写出高质量科普文章?揭秘新时代创作利器!
SEO费用如何根据预算选择最合适的SEO服务,营销类推广网站
seo,seoul city ,ai精洗
颠覆写作方式:免费的AI续写软件助你轻松创作