編輯:Android開發實例
在Activity之間傳遞數據還可以利用一些技巧,不管windows還是Linux操作系統,都會支持一種叫剪切板的技術,也就是某一個程序將一些數據復制到剪切板上,然後其他的任何程序都可以從剪切板中獲取數據,在Android系統中也存在此技術。
使用剪切板會用到,ClipboardManager對象,這個對用剪切板會用到,ClipboardManager象用來操作剪切板,但是沒有提供public的構造函數(單例模式),需要使用Activity.getSystemService(Context.CLIPBOARD_SERVICE)獲取該對象。
在Android-11(Android 3.0)版本之前,利用剪切板傳遞數據使用setText()和getText()方法,但是在此版本之後,這兩個方法就被棄用,轉而使用傳遞ClipData對象來代替。相對於getText和setText而言,利用ClipData對象來傳遞數據,更符合面向對象的思想,而且所能傳遞的數據類型也多樣化了。
主要步驟:
示例代碼
保存數據:
- 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);
- }
- });
- }
讀取數據:
- 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接口來標記。
主要步驟:
示例代碼:
步驟一:
- 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();
- }
- }
總結
綜上所述,使用剪切板傳遞數據有利有弊,剪切板為Android系統管理的,所以在一個地方存入的數據,在這個Android設備上任何應用都可以訪問的到,但是正是因為此設備訪問的都是同一個剪切板,可能會導致當前程序存入的數據,在使用前被其他程序覆蓋掉了,導致無法保證正確獲取數據。
在安卓操作系統下對於 TextView 字體的支持非常有限,默認情況下 TextView 的 typeface 屬性支持 Sans,serif,monospace
Android平台包括JET引擎,可以在應用程序中添加JET音頻內容的交互播放。 Android提供JetPlayer類來處理這些東西。為了使用Jet內容,需要使用Jet
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩
我們知道Intent的應用,可以啟動別一個Activity,那麼是否可以啟動別外的一個應用程序呢,答案是可以的。 1、首先我們新建一個Android應用,名為An