日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

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

發(fā)布時(shí)間:2023/12/2 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 剪切板广播发送者,Android使用剪切板传递数据 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

發(fā)布時(shí)間:2020-08-30 14:15:07

來(lái)源:腳本之家

閱讀:62

作者:Ben_love_Nicole

在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ū)ο蟮乃枷?#xff0c;而且所能傳遞的數(shù)據(jù)類型也多樣化了。

主要步驟:

通過(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í)有所幫助,也希望大家多多支持億速云。

總結(jié)

以上是生活随笔為你收集整理的android 剪切板广播发送者,Android使用剪切板传递数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。