




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
題目:信息同步系統的設計與實現摘要:本系統正是針對那些惡意應用的,詳細的闡述了信息同步系統之手機安全衛士的開發流程,包括手機防盜、通訊衛士、軟件管理、進程管理、手機殺毒、系統優化、高級工具、設置中心等功能模塊。整體項目采用MVC框架,是對安卓知識點的綜合應用,用到的技術有(活動,服務,廣播接收者,內容提供這,喚醒機制,數據庫,自定義標題,自定義控件,小部件,進程間通訊等)。本項目是通過xml文件對頁面進行布局,后臺使用java代碼實現每一個業務邏輯流程,完成頁面中的每一個需求。本系統采用安卓作為開發平臺,使用安卓開發工具作為開發環境,后臺使用sqlite數據庫進行數據的存儲和傳輸,來實現手機衛士之的數據共享和業務邏輯的交互。關鍵詞:手機衛士;安卓開發平臺;MVC框架;數據庫。Abstract:Thesystemisaimedatthosemaliciousapplications,describesindetailthemobilephonesecurityguardsofthedevelopmentprocess,includingmobilephoneanti-theft,communicationguard,softwaremanagement,processmanagement,mobilephoneantivirus,systemoptimization,advancedtools,setthecenterfunctionmodule.ThewholeprojectusingtheMVCframework,itisacomprehensiveapplicationforAndroidknowledgepoint,useofTechnology(activities,services,broadcastreceivers,contentprovidingthis,wake-upmechanism,database,acustomtitle,customcontrols,smallparts,interprocesscommunication).TheprojectisthroughtheXMLfilelayoutonthepage,thebackgroundusingjavacodetoachieveeachbusinesslogicprocess,completetheneedsofeachpageinthe.Thissystemusestheandroidasthedevelopmentplatform,usingtheAndroiddevelopmenttoolsasthedevelopmentenvironment,thebackgroundusingSQLitedatabasefordatastorageandtransmission,interactiontoachievemobilephoneguardsofthesharingofdataandbusinesslogic.
Keywords:mobilephoneguardian,Androiddevelopmentplatform,MVCframework,database目錄TOC\o"1-3"\h\u9898目錄 2262161緒論 3103791.1背景 3226541.2開發思路和計劃 3138882系統需求 587292.1范圍 595672.2定義 511632.3功能需求 5132443模塊一:系統優化模塊 5268743.1系統優化--界面設計 5179213.2系統優化--代碼實現 7105201、CleanCacheActivity類實現系統加速的清理緩存界面類,內部實現了掃面手機及清理緩存的操作。主要代碼如下: 7327672、清單文件需要添加權限: 16283435.4系統優化處理流程 16113893.5子功能模塊的測試 17268324模塊二:高級工具模塊 20226764.2高級工具處理的流程圖 20189404.3主要類介紹
21263304.4高級工具頁面設計 21254514.5高級工具代碼實現 22166141、更新MainActivity的item點擊事件處理代碼,點擊“高級工具”項目時打開對應的頁面: 2222692、AToolsActivity的實現代碼: 22168833、高級工具--號碼歸屬地查詢 2433764、創建androidcomponent:NumberQueryActivity,并勾選layout文件的創建選項:numberqueryactivity_layout.xml。 2629925、NumberQueryActivity的實現代碼: 27257186、測試頁面 28160024.6高級工具--常用號碼查詢,ExpandableListView的使用 3081205模塊三:設置中心模塊 3763265.1設置中心的更新 37224787.2設置中心代碼實現 38236787.3設置中心--更改歸屬地顯示風格 4120367.4測試運行效果 5268358技術控制: 5476821.Dalvik文件格式分析 54124552.Dex文件解析 錯誤!未定義書簽。300662.1定位修改文件 錯誤!未定義書簽。3112210參考文獻: 571緒論1.1背景本次開發是由安博教育和學校發起,學生自主選題的一次畢業設計。伴隨智能手機的不斷普及,移動互聯網的快速發展,伴隨著3G時代的到來,智能手機的廣泛應用,安卓成為活躍用戶量最大的移動終端操作系統,并且安卓操作系統是開放源代碼的,所以每個人都可以開發出一個安卓應用,導致安卓的應用數不勝數。由于安卓的開源,導致每個人可以對安卓端的軟件進行編寫,而有些開發者在應用中加入一些非法的代碼,竊取用戶的隱私,使得手機的安全問題日益明顯,手機安全問題關注度日益提高。隨著Android平臺的發展和普及,Android已經成為惡意代碼的下一個肆虐之地,這里我把一些漏洞的原理和技巧加以整理總結,起到拋磚引玉的作用,希望大家能夠把這些知識用到以后反病毒和軟件保護的工作中.不需要懂得信息安全的人是幸福的,而我們的職責是保障他們的幸福。1.2開發思路和計劃在和指導老師多次交流后,確定實現方案的要點和工作計劃。整體項目采用MVC框架,是對android知識點的綜合應用,用到的技術有activity,service,broadcast,contentprovider,Notification,sqlite數據庫,自定義title,自定義控件,widget,aidl進程間通訊等,本項目所實現的功能如下:①手機防盜:根據預設參數,判斷手機是否被盜,根據自定義協議發送手機中SIM卡的信息和手機的位置信息給安全號碼。可遠程通過短信指令,給手機設置鎖屏密碼,遠程鎖定手機屏幕,遠程格式化手機SD卡,恢復出廠設置,極大的保護用戶的隱私安全,通過aidl注冊admin設備,一般用戶無法卸載該程序。②通訊衛士:來電號碼歸屬地顯示,來電歸屬地位置的調整,來電黑名單/短信黑名單管理。電話短信備份和還原,保護手機的數據和通訊安全。③軟件管理:系統軟件和本地軟件,可以顯示軟件的詳細信息,啟動、刪除、分享應用程序。程序鎖可以指定要保護的程序,用戶進入要保護的程序之前必須輸入密碼。④進程管理:顯示當前系統運行的進程信息,顯示系統內存信息,可以殺死某個進程,批量殺死進程,通過桌面widget實時展現用戶當前的手機內存狀態。⑤手機殺毒:從服務器下載最新的病毒庫,根據程序的包名和程序的數字簽名識別病毒,提示用戶并查殺惡意軟件,使吸費木馬無處可藏。⑥系統優化:清理手機緩存,提高手機性能,優化電池管理。⑦高級工具:手機號碼歸屬地查詢,更改歸屬地位置,常用號碼查詢。⑧設置中心:可以對是否開啟防盜、是否開啟程序鎖服務等功能進行設置,還可以更改來去電顯示的風格。和研究任何其它軟件項目一樣,我做的畢業設計也經歷了從選題,調研,熟悉開發環境,實驗關鍵技術,查找類似的相關系統的資料;系統概要設計,數據庫結構設計,功能模塊開發,功能模塊測試,系統調試和系統試運行和修改。如下1.2-1開發計劃流程圖:選題調查研究資料查詢選題調查研究資料查詢開發環境熟悉學習android技術概要設計數據庫的設計功能模塊開發和詳細設計功能模塊測試項目調試和修改需求分析圖1.2-1開發計劃流程圖2系統需求2.1范圍本次開發的系統為信息同步系統之手機安全衛士。用于廣大Android手機用戶,包括手機防盜、通訊衛士、軟件管理、進程管理、流量統計、手機殺毒、系統優化、高級工具、設置中心2.2定義MSMobileSafe(信息同步系統之手機安全衛士)的縮寫。2.3功能需求1)系統優化:清理手機緩存,提高手機性能,優化電池管理。2)高級工具:手機號碼歸屬地查詢,更改歸屬地位置,常用號碼查詢。3)設置中心:可以對是否開啟防盜、是否開啟程序鎖服務等功能進行設置,還可以更改來去電顯示的風格。3模塊一系統優化模塊3.1系統優化--界面設計1)布局:Android提供的ProgressBarWidget控件,ScrollView內部只能放一個布局,然后在改布局內在添加其他的布局;情況A:ScrollView-LinearLayout-LinearLayout情況B:ScrollView-RelativeLayout-LinearLayoutA,B情況,都會導致ScrollView的滾動條占用一定空間只有將A,B情況的最后LinearLayout改成RelativeLayout,才能是ScrollView的滾動條不占用空間每個item的布局文件:MainActivity添加代碼:case6://系統優化intent=newIntent(MainActivity.this,CleanCacheActivity.class);startActivity(intent);break;3.2系統優化--代碼實現1、CleanCacheActivity類實現系統加速的清理緩存界面類,內部實現了掃面手機及清理緩存的操作。主要代碼如下:利用Handler來實現UI線程的更新的,通過配合Handler來實現timer功能的。privateHandlerhandler=newHandler(){publicvoidhandleMessage(android.os.Messagemsg){switch(msg.what){caseADD_ONE_RESULT://掃描到一條finalStringpackname=(String)msg.obj;//獲取這些應用程序的圖標,名稱,展現在界面上。Viewchild=View.inflate(getApplicationContext(),R.layout.cache_item,null);//為child注冊一個監聽器。清理緩存調用系統的緩存清理功能。child.setOnClickListener(newView.OnClickListener(){點擊child時響應的點擊事件@OverridepublicvoidonClick(Viewv){//判斷SDK的版本號if(Build.VERSION.SDK_INT>=9){//跳轉至“清理緩存”的界面(可以通過:設置-->應用程序-->點擊任意應用程序后的界面)Intentintent=newIntent();intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");intent.addCategory(Intent.CATEGORY_DEFAULT);intent.setData(Uri.parse("package:"+packname));startActivity(intent);}else{Intentintent=newIntent();intent.setAction("ent.action.VIEW");intent.addCategory(Intent.CATEGORY_DEFAULT);intent.addCategory("ent.category.VOICE_LAUNCH");intent.putExtra("pkg",packname);startActivity(intent);}}});//為child中的控件設置數據ImageViewiv_icon=(ImageView)child.findViewById(R.id.iv_cache_icon);iv_icon.setImageDrawable(getApplicationIcon(packname));TextViewtv_name=(TextView)child.findViewById(R.id.tv_cache_name);tv_name.setText(getApplicationName(packname));TextViewtv_size=(TextView)child.findViewById(R.id.tv_cache_size);tv_size.setText("緩存大小:"+Formatter.formatFileSize(getApplicationContext(),cacheinfo.get(packname)));//將child添加到ll_clean控件上。ll_clean.addView(child);break;}};};2)掃描出帶有緩存的應用程序privatevoidscanPackages(){//開啟一個異步任務掃描帶有緩存的應用程序newAsyncTask<Void,Integer,Void>(){//存儲手機中所有已安裝的應用程序的包信息List<PackageInfo>packinfos;@OverrideprotectedVoiddoInBackground(Void...params){inti=0;for(PackageInfoinfo:packinfos){//獲取到應用程序的包名信息Stringpackname=info.packageName;getSize(pm,packname);i++;try{Thread.sleep(100);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}publishProgress(i);}returnnull;}@OverrideprotectedvoidonPreExecute(){cacheinfo=newHashMap<String,Long>();packinfos=pm.getInstalledPackages(0);pd.setMax(packinfos.size());tv_clean_cache_status.setText("開始掃描...");super.onPreExecute();}@OverrideprotectedvoidonPostExecute(Voidresult){tv_clean_cache_status.setText("掃描完畢..."+"發現有"+cacheinfo.size()+"個緩存信息");super.onPostExecute(result);}@OverrideprotectedvoidonProgressUpdate(Integer...values){pd.setProgress(values[0]);tv_clean_cache_status.setText("正在掃描"+values[0]+"條目");super.onProgressUpdate(values);}}.execute();}3)通過反射的方式調用packageManager中的方法privatevoidgetSize(PackageManagerpm,Stringpackname){try{//獲取到getPackageSizeInfo。調用getPackageSizeInfo方法需要在清單文件中配置權限信息:<uses-permission//android:name="android.permission.GET_PACKAGE_SIZE"/>Methodmethod=pm.getClass().getDeclaredMethod("getPackageSizeInfo",newClass[]{String.class,IPackageStatsObserver.class});//執行getPackageSizeInfo方法method.invoke(pm,newObject[]{packname,newMyObersver(packname)});}catch(Exceptione){e.printStackTrace();}}4)執行packageManager中的getPackageSizeInfo方法時需要傳入IPackageStatsObserver.Stub接口,該接口通過aidl調用。privateclassMyObersverextendsIPackageStatsObserver.Stub{privateStringpackname;publicMyObersver(Stringpackname){this.packname=packname;}@OverridepublicvoidonGetStatsCompleted(PackageStatspStats,booleansucceeded)throwsRemoteException{//以下是根據ApplicationsState代碼中的SizeInfo對象中定義的//緩存大小longcacheSize=pStats.cacheSize;//代碼大小longcodeSize=pStats.codeSize;//數據的大小longdataSize=pStats.dataSize;//判斷這個包名對應的應用程序是否有緩存,如果有,則存入到集合中。if(cacheSize>0){Messagemsg=Message.obtain();msg.what=ADD_ONE_RESULT;msg.obj=packname;handler.sendMessage(msg);cacheinfo.put(packname,cacheSize);}}}5)獲取到應用程序的名稱privateStringgetApplicationName(Stringpackname){try{PackageInfopackinfo=pm.getPackageInfo(packname,0);returnpackinfo.applicationInfo.loadLabel(pm).toString();}catch(Exceptione){e.printStackTrace();returnpackname;}}6)獲取到應用程序的圖標privateDrawablegetApplicationIcon(Stringpackname){try{PackageInfopackinfo=pm.getPackageInfo(packname,0);returnpackinfo.applicationInfo.loadIcon(pm);}catch(Exceptione){e.printStackTrace();returngetResources().getDrawable(R.drawable.ic_launcher);}}}//顯示掃描的進度privateProgressBarpd;//提示掃描的狀態privateTextViewtv_clean_cache_status;//系統的包管理器privatePackageManagerpm;//顯示所有帶有緩存的應用程序信息privateLinearLayoutll_clean;//存放緩存信息privateMap<String,Long>cacheinfo;privateHandlerhandler=newHandler(){publicvoidhandleMessage(android.os.Messagemsg){switch(msg.what){caseADD_ONE_RESULT://掃描到一條finalStringpackname=(String)msg.obj;//獲取這些應用程序的圖標,名稱,展現在界面上。Viewchild=View.inflate(getApplicationContext(),R.layout.cache_item,null);//為child注冊一個監聽器。child.setOnClickListener(newView.OnClickListener(){//點擊child時響應的點擊事件@OverridepublicvoidonClick(Viewv){//判斷SDK的版本號if(Build.VERSION.SDK_INT>=9){//跳轉至“清理緩存”的界面(可以通過:設置-->應用程序-->點擊任意應用程序后的界面)Intentintent=newIntent();intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");intent.addCategory(Intent.CATEGORY_DEFAULT);intent.setData(Uri.parse("package:"+packname));startActivity(intent);}else{Intentintent=newIntent();intent.setAction("ent.action.VIEW");intent.addCategory(Intent.CATEGORY_DEFAULT);intent.addCategory("ent.category.VOICE_LAUNCH");intent.putExtra("pkg",packname);startActivity(intent);}}});//為child中的控件設置數據ImageViewiv_icon=(ImageView)child.findViewById(R.id.iv_cache_icon);iv_icon.setImageDrawable(getApplicationIcon(packname));TextViewtv_name=(TextView)child.findViewById(R.id.tv_cache_name);tv_name.setText(getApplicationName(packname));TextViewtv_size=(TextView)child.findViewById(R.id.tv_cache_size);tv_size.setText("緩存大小:"+Formatter.formatFileSize(getApplicationContext(),cacheinfo.get(packname)));//將child添加到ll_clean控件上。ll_clean.addView(child);break;}};};7)掃描出帶有緩存的應用程序privatevoidscanPackages(){//開啟一個異步任務掃描帶有緩存的應用程序newAsyncTask<Void,Integer,Void>(){//存儲手機中所有已安裝的應用程序的包信息List<PackageInfo>packinfos;@OverrideprotectedVoiddoInBackground(Void...params){inti=0;for(PackageInfoinfo:packinfos){//獲取到應用程序的包名信息Stringpackname=info.packageName;getSize(pm,packname);i++;try{Thread.sleep(100);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}publishProgress(i);}returnnull;}@OverrideprotectedvoidonPreExecute(){cacheinfo=newHashMap<String,Long>();packinfos=pm.getInstalledPackages(0);pd.setMax(packinfos.size());tv_clean_cache_status.setText("開始掃描...");super.onPreExecute();}@OverrideprotectedvoidonPostExecute(Voidresult){tv_clean_cache_status.setText("掃描完畢..."+"發現有"+cacheinfo.size()+"個緩存信息");super.onPostExecute(result);}@OverrideprotectedvoidonProgressUpdate(Integer...values){pd.setProgress(values[0]);tv_clean_cache_status.setText("正在掃描"+values[0]+"條目");super.onProgressUpdate(values);}}.execute();}8)通過反射的方式調用packageManager中的方法,這里每次掃描到一個項目就以消息的形式通知主線程,添加到結果列表里去。獲取緩存大小調用了PackageManager的隱藏函數getPackageSizeInfo:privatevoidgetSize(PackageManagerpm,Stringpackname){try{//獲取到getPackageSizeInfo。調用getPackageSizeInfo方法需要在清單文件中配置權限信息:<uses-permission//android:name="android.permission.GET_PACKAGE_SIZE"/>Methodmethod=pm.getClass().getDeclaredMethod("getPackageSizeInfo",newClass[]{String.class,IPackageStatsObserver.class});//執行getPackageSizeInfo方法method.invoke(pm,newObject[]{packname,newMyObersver(packname)});}catch(Exceptione){e.printStackTrace();}}9)執行packageManager中的getPackageSizeInfo方法時需要傳入IPackageStatsObserver.Stub接口,該接口通過aidl調用。privateclassMyObersverextendsIPackageStatsObserver.Stub{privateStringpackname;publicMyObersver(Stringpackname){this.packname=packname;}@OverridepublicvoidonGetStatsCompleted(PackageStatspStats,booleansucceeded)throwsRemoteException{//以下是根據ApplicationsState代碼中的SizeInfo對象中定義的//緩存大小longcacheSize=pStats.cacheSize;//代碼大小longcodeSize=pStats.codeSize;//數據的大小longdataSize=pStats.dataSize;//判斷這個包名對應的應用程序是否有緩存,如果有,則存入到集合中。if(cacheSize>0){Messagemsg=Message.obtain();msg.what=ADD_ONE_RESULT;msg.obj=packname;handler.sendMessage(msg);cacheinfo.put(packname,cacheSize);}}}10)獲取到應用程序的名稱privateStringgetApplicationName(Stringpackname){try{PackageInfopackinfo=pm.getPackageInfo(packname,0);returnpackinfo.applicationInfo.loadLabel(pm).toString();}catch(Exceptione){e.printStackTrace();returnpackname;}}11)獲取到應用程序的圖標privateDrawablegetApplicationIcon(Stringpackname){try{PackageInfopackinfo=pm.getPackageInfo(packname,0);returnpackinfo.applicationInfo.loadIcon(pm);}catch(Exceptione){e.printStackTrace();returngetResources().getDrawable(R.drawable.ic_launcher);}}}清單文件需要添加權限:<uses-permissionandroid:name="android.permission.GET_PACKAGE_SIZE"/>5.4系統優化處理流程由于影響系統運行速度的主要原因是手機中的緩存占用了大量資源,因此本模塊主要是對手機緩存的清理,軟件首先掃描手機中所有的安裝包信息,并根據包名獲取每個應用的緩存信息,當掃描的緩存后提示用戶進行清理,其處理流程如圖開始開始系統優化讀取安裝包信息讀取應用緩存信息是否清理是清理操作結束否圖3.1系統優化處理流程圖3.5子功能模塊的測試進程管理測試圖4模塊二高級工具模塊4.2高級工具處理的流程圖高級工具包含歸屬地查詢、來電歸屬地服務、程序鎖三個子功能,其處理流程如圖4.24所示。開始開始高級工具號碼歸屬地查詢來電歸屬地查詢程序鎖輸入待查號碼開啟服務登錄顯示查詢結果設置顯示樣式和位置選著要加鎖的程序關閉程序鎖結束圖4.2高級工具處理的流程圖4.3主要類介紹
①
公共類
AppLockDao:用于創建并打開程序鎖的數據庫的類
AppLockProvider:用于獲取程序鎖的信息的類
AddressService:獲取號碼歸屬地信息的類
WatchDogService:監控運行進程的類,若發現當前運行進程為加鎖程序,則彈出輸入密碼界面
②
界面類
AppLockActivity:程序鎖的界面類
AToolsActivity:高級工具的主界面類
LockScreenActivity:加鎖程序輸入密碼的界面類
QueryNumberActivity:查詢號碼歸屬地的界面類4.4高級工具頁面設計1)創建androidcomponent:AToolsActivity,并勾選layout文件的創建選項:atoolsactivity_layout.xml。4.5高級工具代碼實現1、更新MainActivity的item點擊事件處理代碼,點擊“高級工具”項目時打開對應的頁面:case7://高級工具intent=newIntent(MainActivity.this,AToolsActivity.class);startActivity(intent);2、AToolsActivity的實現代碼:1號碼歸屬地數據庫文件復制成功則顯示“號碼歸屬查詢”頁面,否則顯示錯誤信息因為資源文件較大,復制需要使用線程,因此這里采用消息接受處理結果。privateHandlerhandler=newHandler(){@OverridepublicvoidhandleMessage(Messagemsg){super.handleMessage(msg);switch(msg.what){caseCOPY_SUCCESS://復制成功,進度條關閉,加載查詢頁面pd.dismiss();loadQueryNumberUI();break;caseCOPY_FAILED://復制失敗,進度條關閉,顯示錯誤信息pd.dismiss();Toast.makeText(AToolsActivity.this,"復制數據失敗",0).show();break;}}};號碼歸屬地查詢單擊事件tv_address_query.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){//將asset目錄下的naddress.db復制到data/data/包名/files/address.dbfinalFilefile=newFile(getFilesDir(),"address.db");if(file.exists()&&file.length()>0){//簡單判斷文件合法性,如果存在且不為空則認為數據庫存在,加載號碼查詢頁面loadQueryNumberUI();}else{//文件不存在,復制過去pd=newProgressDialog(AToolsActivity.this);//水平進度條pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);pd.show();newThread(){@Overridepublicvoidrun(){AssetUtilassetUtil=newAssetUtil(AToolsActivity.this);if(assetUtil.copyFile("naddress.db",file,pd)){//復制成功Messagemessage=Message.obtain();message.what=COPY_SUCCESS;handler.sendMessage(message);}else{//復制失敗Messagemessage=Message.obtain();message.what=COPY_FAILED;handler.sendMessage(message);}};}.start();}}});//常用號碼查詢tv_common_address.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){Intentintent=newIntent(AToolsActivity.this,CommonNumberActivity.class);startActivity(intent);}});程序鎖tv_app_locker.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){Intentintent=newIntent(AToolsActivity.this,AppLockerActivity.class);startActivity(intent);}});3、高級工具--號碼歸屬地查詢號碼歸屬地數據庫文件直接使用assets/naddress.db,號碼歸屬地查詢類NumberAddressDao:publicclassNumberAddressDao{publicstaticfinalStringSQL_SELECT_MOBILEPREFIX="selectcityfromaddress_tbwhere_id=(selectoutkeyfromnuminfowheremobileprefix=?)";publicstaticfinalStringSQL_SELECT_AREA="selectcityfromaddress_tbwhere_id=(selectoutkeyfromnuminfowheremobileprefix=?)";privateContextcontext;publicNumberAddressDao(Contextcontext){this.context=context;}publicStringgetAddress(Stringnumber){Stringaddress=number;Filefile=newFile(context.getFilesDir(),"address.db");Stringpath=file.getAbsolutePath();SQLiteDatabasedb=SQLiteDatabase.openDatabase(path,null,SQLiteDatabase.OPEN_READONLY);if(db.isOpen()){if(number.matches("^1[3458]\\d{9}$")){//匹配手機的前7位Cursorcursor=db.rawQuery(SQL_SELECT_MOBILEPREFIX,newString[]{number.substring(0,7)});if(cursor.moveToFirst()){address=cursor.getString(0);}cursor.close();}else{Cursorcursor;switch(number.length()){case4:address="模擬器";break;case7:case8://一般是不帶區號的本地號碼address="本地號碼";break;case10://帶有三位區號的號碼cursor=db.rawQuery(SQL_SELECT_AREA,newString[]{number.substring(0,3)});if(cursor.moveToFirst()){address=cursor.getString(0);}cursor.close();break;case12://帶有四位區號的號碼cursor=db.rawQuery(SQL_SELECT_AREA,newString[]{number.substring(0,4)});if(cursor.moveToFirst()){address=cursor.getString(0);}cursor.close();break;case11://三位區號號碼+8位號碼或者是四位區號+7位號碼cursor=db.rawQuery(SQL_SELECT_AREA,newString[]{number.substring(0,3)});if(cursor.moveToFirst()){address=cursor.getString(0);}cursor.close();cursor=db.rawQuery(SQL_SELECT_AREA,newString[]{number.substring(0,4)});if(cursor.moveToFirst()){address=cursor.getString(0);}cursor.close();break;}}}returnaddress;}}創建androidcomponent:NumberQueryActivity,并勾選layout文件的創建選項:numberqueryactivity_layout.xml。5、NumberQueryActivity的實現代碼:publicclassNumberQueryActivityextendsActivity{privateEditTextet_number;privateButtonbt_query;privateTextViewtv_area;publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.numberqueryactivity_layout);et_number=(EditText)findViewById(R.id.et_number);bt_query=(Button)findViewById(R.id.bt_query);tv_area=(TextView)findViewById(R.id.tv_area);//點擊查詢bt_query.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){Stringnumber=et_number.getText().toStrin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣告管理案例評析(一)
- 2025年工業互聯網平臺TEE在智能工廠設備維護中的應用分析報告
- 攪拌站業務人員管理制度
- picc管維護管理制度
- 山西村集體用工管理制度
- 三級子公司工資管理制度
- 學院圖書館采編管理制度
- 2025年福建省中考道德與法治真題(解析版)
- 星級管理動態管理制度
- 為規范公司印章管理制度
- 計量經濟學論文(eviews分析)影響我國人口預期壽命的可能因素分析
- 足球公園計劃書
- 銀行合規文化培訓課件
- 礦山生態修復工程驗收規范
- 雙減背景下提升學業水平初中英語作業設計策略研究課題開題報告
- 《網架結構》課件
- 《合同履行》課件
- 《總圖設計講義》課件
- 消火栓操作培訓課件
- 幼兒園幼小銜接課件:《我上小學啦》
- 不寐的護理查房課件
評論
0/150
提交評論