Android 는 클립보드 로 데 이 터 를 전달 합 니 다.
5529 단어 Android커팅 보드데 이 터 를 전달 하 다
클립보드 를 사용 하면 클립보드 관리자 대상 에 사 용 됩 니 다.클립보드 관리자 이미 지 는 클립보드 를 조작 하 는 데 사 용 됩 니 다.그러나 Public 의 구조 함수(단일 모드)가 제공 되 지 않 았 습 니 다.Activity.getSystemService(Context.CLIPBOARD)를 사용 해 야 합 니 다.서비스)이 대상 을 가 져 옵 니 다.
Android-11(Android 3.0)버 전에 서 는 클립보드 로 데 이 터 를 전달 하 는 데 setText()와 getText()방법 을 사용 하지만,이 버 전에 서 는 이 두 가지 방법 이 버 려 지고 전달 ClipData 대상 으로 대체 된다.getText 와 setText 에 비해 ClipData 대상 을 이용 하여 데 이 터 를 전달 하 는 것 은 대상 을 대상 으로 하 는 사상 에 더욱 부합 되 고 전달 할 수 있 는 데이터 유형 도 다양 해 졌 다.
주요 단계:
getSystemService 를 통 해 Clipboard Manager 대상 cm 를 가 져 옵 니 다.
cm.setPrimary Clip()방법 으로 ClipData 데이터 대상 을 설정 합 니 다.
새 Activity 에서 Clipboard Manager 대상 cm 를 가 져 옵 니 다.
cm.getPrimary Clip()방법 으로 클립보드 의 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 를 만 듭 니 다.
데이터 저장:Clipboard Manager 를 가 져 오고 Base 64 클래스 를 통 해 MyData 대상 을 직렬 화하 여 클립보드 에 저장 합 니 다.
데이터 추출:새 Activity 에서 Clipboard Manager 를 가 져 와 직렬 화 된 데 이 터 를 역 직렬 화 합 니 다.Base 64 클래스 를 사용 합 니 다.그리고 반 직렬 화 된 데 이 터 를 처리 합 니 다.
예제 코드:
단계 1:
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;
}
}
단계 2:
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);
}
});
}
단계 3:
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 장치 에서 모든 응용 프로그램 에 접근 할 수 있 습 니 다.그러나 이 장 치 는 같은 클립보드 에 접근 하기 때문에 현재 프로그램 에 저 장 된 데 이 터 를 사용 하기 전에 다른 프로그램 에 덮어 쓸 수 있 습 니 다.정확 한 데 이 터 를 확보 할 수 없 게 되 었 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.