概述
android开发中经常会碰到传递数据,尤其是2个Activity之间,当然我们更喜欢用Intent毕竟启动Activity的时候用的就是Intent ,但只有这一种方法吗,下面就给大家介绍一种通过剪切板传递数据的方法,为了防止该数据被任意的复制黏贴,我们用Base64加密。
布局文件很简单,第一个Activity的布局文件只有一个Button 触发第二个Activity,第二个Activity只有一个TextView用来显示数据。
简单起见,我们只贴出Activity的部分,同时不要忘了四大组建需要在manifest里面注册的哦。
package com.example.blog;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.StreamCorruptedException;
import android.app.Activity;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Bundle;
import android.util.Base64;
import android.widget.TextView;
public class ClipActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.showclip);
TextView tv=(TextView) findViewById(R.id.tv);
/**
* 下面的代码从剪切板中获取Base64格式的字符串
*/
ClipboardManager clipboard=(ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
String base64Str=clipboard.getText().toString();
byte[] buffer=Base64.decode(base64Str, Base64.DEFAULT);
ByteArrayInputStream bais=new ByteArrayInputStream(buffer);
try {
ObjectInputStream ois=new ObjectInputStream(bais);
//将byte[]数据还原成String对象
String receiveData=(String) ois.readObject();
tv.setText(receiveData);
} catch (StreamCorruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
第二个Activity:
package com.example.blog;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Date;
import android.app.Activity;
import android.app.Application;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Base64;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt=(Button) findViewById(R.id.clip);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent(MainActivity.this,ClipActivity.class);
String data="我是通过ClipBoard传递的数据";
ClipboardManager clipboard=(ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
//下面代码将data转化为Base64格式的字符串
ByteArrayOutputStream baos=new ByteArrayOutputStream();
String base64str="";
try {
ObjectOutputStream oos=new ObjectOutputStream(baos);
oos.writeObject(data);
//使用Base64.encodeToString方法将byte[]数据装换成Base64字符串
base64str=Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);
oos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//向剪切板写入Base64格式的字符串
clipboard.setText(base64str);
startActivity(intent);
}
});
}
}
于是,我们又掌握了一种传递数据的方法,不过需要注意的是既然此处使用了剪切板其他地方的copy的内容就没了哦
最后
以上就是等待大炮为你收集整理的通过Clipboard传递数据的全部内容,希望文章能够帮你解决通过Clipboard传递数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复