亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android使用剪切板傳遞數(shù)據(jù)

瀏覽:99日期:2022-09-25 11:02:30

在Activity之間傳遞數(shù)據(jù)還可以利用一些技巧,不管windows還是Linux操作系統(tǒng),都會(huì)支持一種叫剪切板的技術(shù),也就是某一個(gè)程序?qū)⒁恍?shù)據(jù)復(fù)制到剪切板上,然后其他的任何程序都可以從剪切板中獲取數(shù)據(jù),在Android系統(tǒng)中也存在此技術(shù)。

使用剪切板會(huì)用到,ClipboardManager對(duì)象,這個(gè)對(duì)用剪切板會(huì)用到,ClipboardManager象用來(lái)操作剪切板,但是沒(méi)有提供public的構(gòu)造函數(shù)(單例模式),需要使用Activity.getSystemService(Context.CLIPBOARD_SERVICE)獲取該對(duì)象。

在Android-11(Android 3.0)版本之前,利用剪切板傳遞數(shù)據(jù)使用setText()和getText()方法,但是在此版本之后,這兩個(gè)方法就被棄用,轉(zhuǎn)而使用傳遞ClipData對(duì)象來(lái)代替。相對(duì)于getText和setText而言,利用ClipData對(duì)象來(lái)傳遞數(shù)據(jù),更符合面向?qū)ο蟮乃枷耄宜軅鬟f的數(shù)據(jù)類型也多樣化了?!?/p>

主要步驟:

通過(guò)getSystemService獲取ClipboardManager對(duì)象cm。

使用cm.setPrimaryClip()方法設(shè)置ClipData數(shù)據(jù)對(duì)象。

在新Activity中獲取ClipboardManager對(duì)象cm。

使用cm.getPrimaryClip()方法獲取剪切板的ClipData數(shù)據(jù)對(duì)象,cd。

通過(guò)cd.getItemAt(0)獲取到傳遞進(jìn)來(lái)的數(shù)據(jù)。

示例代碼

保存數(shù)據(jù):

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); } }); }

讀取數(shù)據(jù):

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類型的數(shù)據(jù),如果需要傳遞一個(gè)對(duì)象,那么被傳遞的對(duì)象必須可序列化,序列化通過(guò)實(shí)現(xiàn)Serializable接口來(lái)標(biāo)記。

主要步驟:

創(chuàng)建一個(gè)實(shí)現(xiàn)了Serializable接口的類MyData。 存入數(shù)據(jù):獲取ClipboardManager,并對(duì)通過(guò)Base64類對(duì)MyData對(duì)象進(jìn)行序列化,再存入剪切板中。 取出數(shù)據(jù):在新Activity中,獲取ClipboardManager,對(duì)被序列化的數(shù)據(jù)進(jìn)行反序列化,同樣使用Base64類。然后對(duì)反序列化的數(shù)據(jù)進(jìn)行處理。

示例代碼:

步驟一:

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(); } }

總結(jié)

綜上所述,使用剪切板傳遞數(shù)據(jù)有利有弊,剪切板為Android系統(tǒng)管理的,所以在一個(gè)地方存入的數(shù)據(jù),在這個(gè)Android設(shè)備上任何應(yīng)用都可以訪問(wèn)的到,但是正是因?yàn)榇嗽O(shè)備訪問(wèn)的都是同一個(gè)剪切板,可能會(huì)導(dǎo)致當(dāng)前程序存入的數(shù)據(jù),在使用前被其他程序覆蓋掉了,導(dǎo)致無(wú)法保證正確獲取數(shù)據(jù)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 国产高清一级视频在线观看 | 国产成人久久精品激情91 | 亚洲一区二区三区久久精品 | 色综合合久久天天综合绕视看 | 91福利国产在线观看香蕉 | 免费一级特黄特色大片∵黄 | 欧美成人黄色片 | 69成人做爰视频69 | 香蕉在线观看视频 | 午夜看一级特黄a大片 | 黄色毛片免费进入 | 99re最新地址获取精品 | 免费在线看黄网址 | 国产午夜在线观看 | 黄色免费毛片 | 国产成人久久综合二区 | 一区二区不卡视频在线观看 | 中日一级片| 特级黄色视频毛片 | 一本无线乱码不卡一二三四 | 国产v视频 | 免费看香港一级毛片 | 国产精品亚洲专区一区 | 久久www免费人成看片色多多 | 可以免费看黄的网址 | 日韩成人综合网 | 日韩a无吗一区二区三区 | 在线免费不卡视频 | 午夜亚洲精品久久久久 | 国产精品综合一区二区三区 | 三级 在线播放 | 国产又色又爽的视频免费 | 国产亚洲精品久久麻豆 | 国产精品亚洲精品久久成人 | 日韩一级片视频 | 一区二区三区四区视频在线观看 | 欧美国产亚洲一区 | 国产曰批视频免费观看完 | 五月天丁香婷婷网 | 青青青青啪视频在线观看 | 女人精aaaa片一级毛片女女 |