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

您的位置:首頁/技術文章
文章詳情頁

Android使用剪切板傳遞數據

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

在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設備上任何應用都可以訪問的到,但是正是因為此設備訪問的都是同一個剪切板,可能會導致當前程序存入的數據,在使用前被其他程序覆蓋掉了,導致無法保證正確獲取數據。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Android
相關文章:
主站蜘蛛池模板: 亚洲欧美日韩国产综合专区 | 57pao一国产成视频永久免费 | 欧美日韩精品一区二区三区视频 | 免费性生活视频 | 国产一区二区三区四区20p | 国产欧美一区二区三区视频在线观看 | a级毛片在线观看 | 国产精品成人免费视频 | 免费三级网站 | 国产精品日韩精品 | 99久久免费精品高清特色大片 | 亚洲国产系列一区二区三区 | 九九热国产精品视频 | 99久久精品毛片免费播放 | 国产在线观看午夜不卡 | 亚洲精品第1页 | 精品一区二区三区在线视频观看 | 国产人成午夜免视频网站 | 成人18在线观看 | 国产视频一区在线播放 | 99精品国产自产在线观看 | 午夜视频在线观看国产www | 色播综合网 | 日本免费黄色片 | 欧美国产在线一区 | 播放中国女人毛片一级带 | 美女被靠视频免费网站不需要会员 | 中文字幕一区二区视频 | 亚洲精品视频免费 | 欧洲成人免费高清视频 | 在线成h人视频网站免费观看 | 久久精品亚洲精品一区 | 久久久久国产免费 | 三极片免费看 | 一级做a爰片久久毛片人呢 一级做a爰片久久毛片毛片 | 国产欧美一区二区三区免费 | 精品国产91久久久久久久a | 久久婷婷是五月综合色狠狠 | 亚洲美女黄色片 | 亚洲国产精品久久久久秋霞66 | 国产精品免费大片一区二区 |