Android 는 클립보드 로 데 이 터 를 전달 합 니 다.

Activity 간 에 데 이 터 를 전달 하 는 기술 도 이용 할 수 있다.windows 든 Linux 운영 체제 든 모두 클립보드 라 는 기술 을 지원 한다.즉,특정한 프로그램 이 일부 데 이 터 를 클립보드 에 복사 한 다음 에 다른 모든 프로그램 이 클립보드 에서 데 이 터 를 얻 을 수 있 고 안 드 로 이 드 시스템 에 도 이 기술 이 존재 한다.
클립보드 를 사용 하면 클립보드 관리자 대상 에 사 용 됩 니 다.클립보드 관리자 이미 지 는 클립보드 를 조작 하 는 데 사 용 됩 니 다.그러나 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 장치 에서 모든 응용 프로그램 에 접근 할 수 있 습 니 다.그러나 이 장 치 는 같은 클립보드 에 접근 하기 때문에 현재 프로그램 에 저 장 된 데 이 터 를 사용 하기 전에 다른 프로그램 에 덮어 쓸 수 있 습 니 다.정확 한 데 이 터 를 확보 할 수 없 게 되 었 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기