麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 系統(tǒng) > Android > 正文

Android學(xué)習(xí)筆記--使用剪切板在Activity中傳值示例代碼

2020-04-11 12:07:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
在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ù)類(lèi)型也多樣化了。 

主要步驟:
通過(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ù):
復(fù)制代碼 代碼如下:

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

讀取數(shù)據(jù):
復(fù)制代碼 代碼如下:

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類(lèi)型的數(shù)據(jù),如果需要傳遞一個(gè)對(duì)象,那么被傳遞的對(duì)象必須可序列化,序列化通過(guò)實(shí)現(xiàn)Serializable接口來(lái)標(biāo)記。
主要步驟:
創(chuàng)建一個(gè)實(shí)現(xiàn)了Serializable接口的類(lèi)MyData。
存入數(shù)據(jù):獲取ClipboardManager,并對(duì)通過(guò)Base64類(lèi)對(duì)MyData對(duì)象進(jìn)行序列化,再存入剪切板中。
取出數(shù)據(jù):在新Activity中,獲取ClipboardManager,對(duì)被序列化的數(shù)據(jù)進(jìn)行反序列化,同樣使用Base64類(lèi)。然后對(duì)反序列化的數(shù)據(jù)進(jìn)行處理。
示例代碼:
步驟一:
復(fù)制代碼 代碼如下:

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

步驟二:
復(fù)制代碼 代碼如下:

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

步驟三:
復(fù)制代碼 代碼如下:

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ù)。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久精品伊人网 | 成人在线免费视频观看 | 精品99在线视频 | 欧美一级毛片大片免费播放 | 国产无限资源在线观看 | 精品国产乱码久久久久久久 | 国产无区一区二区三麻豆 | 中文在线观看视频 | 在线91视频 | 一级黄色影院 | 欧美在线观看视频网站 | 精品国产一区三区 | 日韩中文字幕一区二区三区 | 草草视频免费 | 国产九色视频在线观看 | 亚洲欧美国产高清va在线播放 | 永久免费黄色大片 | 亚洲一级片免费观看 | 性欧美xxxx极品摘花 | 亚州精品天堂中文字幕 | 久久精品欧美一区二区三区不卡 | 亚洲白嫩在线观看 | 国产乱淫a∨片免费视频 | xvideos korean| 国产美女做爰免费视 | 久草成人在线观看 | 青草久久av | 羞羞视频免费观看入口 | 99视频网址| 久久亚洲精品国产一区 | 202z中文字幕第一页 | 毛片视频大全 | 欧产日产国产精品乱噜噜 | 国产精品色在线网站 | 欧美一区二区三区免费观看 | 国产成人高潮免费观看精品 | 欧美特级一级毛片 | 黄色视屏免费看 | 免费永久看羞羞片网站入口 | 电影av在线 | 欧美日韩在线视频观看 |