菜鳥Android之路(上),菜鳥android之路
自己為什麼要學android
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.intentcallphone" android:versionCode="1" android:versionName="1.0" > 3 <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> <uses-permission android:name="android.permission.CALL_PHONE" />" <!-- 代表當前應用 --> 4 <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > 5 <activity android:name=".MainActivity" android:label="@string/app_name" > 6 <!-- main主入口 --> <!-- 意圖過濾器 --> 7 <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> 8 </intent-filter> 9 </activity> 10 </application> 11 </manifest>
1 android:id="@+id/pay" 2 android:layout_width="fill_parent" 3 android:layout_height="wrap_content" 4 android:layout_margin="10dp" 5 android:onClick="pay" 6 android:text="支付" 7 tools:ignore="HardcodedText" /> 8 9 public void pay(View v) {10 //要執行的操作11 }
需要判斷sdcard剩餘空間
1 //判斷sdcard儲存空間是否滿足檔案的儲存 2 File sdcard_filedir = Environment.getExternalStorageDirectory();//得到sdcard的目錄作為一個檔案對象 3 long usableSpace = sdcard_filedir.getUsableSpace();//擷取檔案目錄對象剩餘空間 4 long totalSpace = sdcard_filedir.getTotalSpace(); 5 //將一個long類型的檔案大小格式化成使用者可以看懂的M,G字串 6 String usableSpace_str = Formatter.formatFileSize(mContext, usableSpace); 7 tring totalSpace_str = Formatter.formatFileSize(mContext, totalSpace); 8 if(usableSpace < 1024 * 1024 * 200){//判斷剩餘空間是否小於200M 9 Toast.makeText(mContext, "sdcard剩餘空間不足,無法滿足下載;剩餘空間為:"+usableSpace_str, Toast.LENGTH_SHORT).show();10 return ; 11 }12 13 /data/data: context.getFileDir().getPath();14 是一個應用程式的私人目錄,只有當前應用程式有許可權訪問讀寫,其他應用無許可權訪問。一些安全性要求比較高的資料存放在該目錄,一般用來存放size比較小的資料。15 /sdcard: Enviroment.getExternalStorageDirectory().getPath();16 是一個外部儲存目錄,只用應用聲明了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>的一個許可權,就可以訪問讀寫sdcard目錄;所以一般用來存放一些安全性不高的資料,檔案size比較大的資料。
1 1.寫布局 2 3 2.商務邏輯 4 a.備份 5 1.封裝簡訊資料到list中 6 2.將list中的資料寫到xml檔案中。 7 b.恢複 8 1.解析xml檔案中簡訊資料,封裝到list集合中 9 2.將解析資料列印。10 11 XmlPullParser12 13 //使用XmlSerializer來序列化xml檔案14 public static boolean backupSms_android(Context context){15 16 try{17 18 //[0]擷取簡訊資料19 ArrayList<SmsBean> allSms = SmsDao.getAllSms();20 //[1]通過Xml擷取一個XmlSerializer對象21 XmlSerializer xs = Xml.newSerializer();22 //[2]設定XmlSerializer的一些參數,比如:設定xml寫入到哪個檔案中23 //os:xml檔案寫入流 encoding:流的編碼24 xs.setOutput(context.openFileOutput("backupsms2.xml", Context.MODE_PRIVATE), "utf-8");25 //[3]序列化一個xml的聲明頭26 //encoding:xml檔案的編碼 standalone:是否獨立27 xs.startDocument("utf-8", true);28 //[4]序列化一個根節點的開始節點29 //namespace:命名空間 name: 標籤的名稱30 xs.startTag(null, "Smss");31 //[5]迴圈遍曆list集合序列化一條條簡訊32 33 for (SmsBean smsBean : allSms) {34 xs.startTag(null, "Sms");35 //name:屬性的名稱 value:屬性值36 xs.attribute(null, "id", smsBean.id+"");37 38 xs.startTag(null, "num");39 //寫一個標籤的內容40 xs.text(smsBean.num);41 xs.endTag(null, "num");42 43 xs.startTag(null, "msg");44 xs.text(smsBean.msg);45 xs.endTag(null, "msg");46 47 xs.startTag(null, "date");48 xs.text(smsBean.date);49 xs.endTag(null, "date");50 51 xs.endTag(null, "Sms");52 }53 54 //[6]序列化一個根節點的結束節點55 xs.endTag(null, "Smss");56 //[7]將xml寫入到檔案中,完成xml的序列化57 xs.endDocument();58 return true;59 60 }catch (Exception e) {61 e.printStackTrace();62 }63 return false;64 }
- 使用pull解析xml格式的資料
1 dom解析:基於全文載入的解析方式 sax解析:基於事件的逐行解析方式 pull解析:同sax 2 3 產生 XmlSerializer 模板代碼 4 解析 XmlPullParser 模板代碼 5 6 7 //解析xml檔案讀取簡訊內容 8 public static int restoreSms(Context context) { 9 ArrayList<SmsBean> arrayList = null;10 SmsBean smsBean = null;11 try{12 //1.通過Xml擷取一個XmlPullParser對象13 XmlPullParser xpp = Xml.newPullParser();14 //2.設定XmlPullParser對象的參數,需要解析的是哪個xml檔案,設定一個檔案讀取流15 16 //通過context擷取一個資產管理者對象17 AssetManager assets = context.getAssets();18 //通過資產管理者對象能擷取一個檔案讀取流19 InputStream inputStream = assets.open("backupsms.xml");20 xpp.setInput(inputStream,"utf-8");21 //xpp.setInput(context.openFileInput("backupsms2.xml"), "utf-8");22 //3.擷取當前xml行的事件類型23 int type = xpp.getEventType();24 //4.判斷事件類型是否是文檔結束的事件類型25 while(type != XmlPullParser.END_DOCUMENT){26 //5.如果不是,迴圈遍曆解析每一行的資料。解析一行後,擷取下一行的事件類型27 28 String currentTagName = xpp.getName();29 //判斷當前行的事件類型是開始標籤還是結束標籤30 switch (type) {31 case XmlPullParser.START_TAG:32 if(currentTagName.equals("Smss")){33 //如果當前標籤是Smss,需要初始化一個集合34 arrayList = new ArrayList<SmsBean>();35 }else if(currentTagName.equals("Sms")){36 37 smsBean = new SmsBean();38 smsBean.id = Integer.valueOf(xpp.getAttributeValue(null, "id"));39 40 }else if(currentTagName.equals("num")){41 smsBean.num = xpp.nextText();42 }else if(currentTagName.equals("msg")){43 smsBean.msg = xpp.nextText();44 }else if(currentTagName.equals("date")){45 smsBean.date = xpp.nextText();46 }47 break;48 case XmlPullParser.END_TAG:49 //當前結束標籤是Sms的話,一條簡訊資料封裝完成, 可以加入list中50 if(currentTagName.equals("Sms")){51 arrayList.add(smsBean);52 }53 break;54 default:55 break;56 }57 58 type = xpp.next();//擷取下一行的事件類型59 }60 61 return arrayList.size();62 63 }catch (Exception e) {64 e.printStackTrace();65 }66 return 0;67 } 先寫到這裡,歡迎交流,進入本人網站:www.wangsong520.com進行留言交流,並且裡面有更多知識分享!