安卓應(yīng)用總結(jié)_第1頁
安卓應(yīng)用總結(jié)_第2頁
安卓應(yīng)用總結(jié)_第3頁
安卓應(yīng)用總結(jié)_第4頁
安卓應(yīng)用總結(jié)_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

安卓應(yīng)用總結(jié)一、Activity類1、生命周期Android定義了一系列與生命周期相關(guān)的方法,在我們自己的Activity中,只是根據(jù)需要復(fù)寫需要的方法,Java的多態(tài)性會(huì)保證我們自己的方法被虛擬機(jī)調(diào)用(即回調(diào)方法)。publicclassOurActivityextendsActivity(protectedvoidonCreate(BundlesavedInstanceState);setContentView(R.layout.main);/設(shè)置界面布局protectedvoidonStart();//啟動(dòng)protectedvoidonResume();//進(jìn)入界面之前protectedvoidonPause();protectedvoidonStop();protectedvoidonDestroy();}onCreate==>onStart()==>onResume()==>running==>onPause()==>onStop()==>onDestroy()注:在這些生命周期方法中必須調(diào)用父類的該方法2、啟動(dòng)另外一個(gè)ActivityActivity.startA的電)()方法可以根據(jù)傳入的參數(shù)啟動(dòng)另外一個(gè)Activity:Intentintent=newIntent(CurrentActivity.this,OtherActivity.class);startActivity(intent);注:OtherActivity同樣需要在AndroidManifest.xml中定義3、Activity之間通信在Android中,不同的Activity實(shí)例可能運(yùn)行在一個(gè)進(jìn)程中,也可能運(yùn)行在不同的進(jìn)程中。因此我們需要一種特別的機(jī)制幫助我們在Activity之間傳遞消息。Android中通過Intent對象來表示一條消息,一個(gè)Intent對象不僅包含有這個(gè)消息的目的地,還可以包含消息的內(nèi)容,這好比一封Email,其中不僅應(yīng)該包含收件地址,還可以包含具體的內(nèi)容。對于一個(gè)Intent對象,消息“目的地”是必須的,而內(nèi)容則是可選項(xiàng)。Intent的中文意思是目的。在Android中也是"目的”的意思。就是我們要去哪里,從這個(gè)activity要前往另一個(gè)Activity就需要用到Intent。發(fā)件人:(CurrentActivity類中)Intentintent=newIntent(CurrentActivity.this,OtherActivity.class);//創(chuàng)建一個(gè)帶“收件人地址”的emailBundlebundle=newBundle();//創(chuàng)建email內(nèi)容bundle.putBoolean(〃boolean_key〃,true);//編寫內(nèi)容bundle.putString(〃string_key〃,〃string_value〃);intent.putExtra(〃key〃,bundle);//封裝emailstartActivity(intent);//啟動(dòng)新的Activity收件人:(OtherActivity類中)Intentintent=getIntent();//收取email

Bundlebundle=intent.getBundleExtra(〃key〃);//打開emailbundle.getBoolean(〃boolean_key〃);//讀取內(nèi)容bundle.getString(〃string_key〃);使用SharedPreferencesSharedPreferences使用xml格式為Android應(yīng)用提供一種永久的數(shù)據(jù)存貯方式。對于一個(gè)Android應(yīng)用,它存貯在文件系統(tǒng)的/data/data/your_app_package_name/shared_prefs/目錄下,可以被處在同一個(gè)應(yīng)用中的所有Activity訪問。Android提供了相關(guān)的API來處理這些數(shù)據(jù)而不需要程序員直接操作這些文件或者考慮數(shù)據(jù)同步問題。//寫入SharedPreferencesSharedPreferencespreferences=getSharedPreferences(〃name〃,MODE_PRIVATE);Editoreditor=preferences.edit();editor.putBoolean(〃boolean_key〃,true);editor.putString(〃string_key〃,〃string_value〃);mit();//讀取SharedPreferencesSharedPreferencespreferences=getSharedPreferences(〃name〃,MODE_PRIVATE);preferences.getBoolean(〃boolean_key〃,false);preferences.getString(〃string_key〃,〃default_value〃);4、Activity的IntentFilterIntentFilter描述了一個(gè)組件愿意接收什么樣的Intent對象,Android將其抽象為android.content.IntentFilter類。在Android的AndroidManifest.xml配置文件中可以通過<intent-filter>節(jié)點(diǎn)為一個(gè)Activity指定其IntentFilter,以便告訴系統(tǒng)該Activity可以響應(yīng)什么類型的Intento當(dāng)程序員使用startActivity(intent)來啟動(dòng)另外一個(gè)Activity時(shí),如果直接指定intent了對象的Component屬性,那么ActivityManager將試圖啟動(dòng)其Component屬性指定的Activity。否則Android將通過Intent的其它屬性從安裝在系統(tǒng)中的所有Activity中查找與之最匹配的一個(gè)啟動(dòng),如果沒有找到合適的Activity,應(yīng)用程序會(huì)得到一個(gè)系統(tǒng)拋出的異常。①Action匹配Action是一個(gè)用戶定義的字符串,用于描述一個(gè)Android應(yīng)用程序組件,一個(gè)IntentFilter可以包含多個(gè)Actiono在AndroidManifest.xml的Activity定義時(shí)可以在其<intent-filter>節(jié)點(diǎn)指定一個(gè)Action列表用于標(biāo)示Activity所能接受的“動(dòng)作”,例如:〈intent-filter><actionandroid:name=〃ent.action.MAIN〃/><actionandroid:name=〃com.zy.myaction〃/></intent-filter>如果我們在啟動(dòng)一個(gè)Activity時(shí)使用這樣的Intent對象:Intentintent=newIntent();intent.setAction(〃com.zy.myaction〃);那么所有的Action列表中包含了“com.zy.myaction”的Activity都將會(huì)匹配成功。Android預(yù)定義了一系列的Action分別表示特定的系統(tǒng)動(dòng)作。這些Action通過常量的方式定義在android.content.Intent中,以“ACTION_”開頭。我們可以在Android提供的文檔中找到它們的詳細(xì)說明。一URI數(shù)據(jù)匹配一個(gè)Intent可以通過URI攜帶外部數(shù)據(jù)給目標(biāo)組件。在<intent-filter>節(jié)點(diǎn)中,通過<data/>節(jié)點(diǎn)匹配外部數(shù)據(jù)。mimeType屬性指定攜帶外部數(shù)據(jù)的數(shù)據(jù)類型,scheme指定協(xié)議,host、port、path指定數(shù)據(jù)的位置、端口、和路徑。如下:<dataandroid:mimeType=〃mimeType〃android:scheme=〃scheme〃android:host=〃host〃android:port=〃port〃android:path=〃path〃/>如果在IntentFilter中指定了這些屬性,那么只有所有的屬性都匹配成功時(shí)URI數(shù)據(jù)匹配才會(huì)成功。Category類別匹配〈intent-filter>節(jié)點(diǎn)中可以為組件定義一個(gè)Category類別列表,當(dāng)Intent中包含這個(gè)列表的所有項(xiàng)目時(shí)Category類別匹配才會(huì)成功。5、一些關(guān)于Activity的技巧①鎖定Activity運(yùn)行時(shí)的屏幕方向Android內(nèi)置了方向感應(yīng)器的支持。在G1中,Android會(huì)根據(jù)G1所處的方向自動(dòng)在豎屏和橫屏間切換。但是有時(shí)我們的應(yīng)用程序僅能在橫屏/豎屏?xí)r運(yùn)行,比如某些游戲,此時(shí)我們需要鎖定該Activity運(yùn)行時(shí)的屏幕方向,<activity>節(jié)點(diǎn)的android:screenOrientation屬性可以完成該項(xiàng)任務(wù),示例代碼如下:<activityandroid:name=〃.EX01〃android:label=〃@string/app_name〃android:screenOrientation=〃portrait〃〉//豎屏,值為landscape時(shí)為橫屏</activity>全屏的Activity要使一個(gè)Activity全屏運(yùn)行,可以在其onCreate()方法中添加如下代碼實(shí)現(xiàn)://設(shè)置全屏模式getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//去除標(biāo)題欄requestWindowFeature(Window.FEATURE_NO_TITLE);在Activity的Title中加入進(jìn)度條為了更友好的用戶體驗(yàn),在處理一些需要花費(fèi)較長時(shí)間的任務(wù)時(shí)可以使用一個(gè)進(jìn)度條來提示用戶“不要著急,我們正在努力的完成你交給的任務(wù)”。如下圖:在Activity的標(biāo)題欄中顯示進(jìn)度條不失為一個(gè)好辦法,下面是實(shí)現(xiàn)代碼://不明確進(jìn)度條requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);setContentView(R.layout.main);setProgressBarlndeterminateVisibility(true);//明確進(jìn)度條requestWindowFeature(Window.FEATURE_PROGRESS);setContentView(R.layout.main);setProgress(5000);二、布局幾種布局方式:View的布局顯示方式有下面幾種:線性布局(LinearLayout)、相對布局(RelativeLayout)、表格布局(TableLayout)、網(wǎng)格視圖(GridView)、標(biāo)簽布局(TabLayout)、列表視圖(ListView)、絕對布局(AbsoluteLayout)幀布局(FrameLayout)。語:布局相對比較簡單,這里不再詳細(xì)介紹。三、控件的使用1、ListView、Spinner、GridView與GalleryListView和Gallery,Spinner有一個(gè)共同點(diǎn):它們都是AdapterView的子類。AdapterView的顯示可以通過數(shù)據(jù)綁定來實(shí)現(xiàn),數(shù)據(jù)源可以是數(shù)組或是數(shù)據(jù)庫記錄,數(shù)據(jù)源和AdapterView是通過Adapter作為橋梁。通過Adapter,AdatperView可以顯示數(shù)據(jù)源或處理用戶選取事件適配器有:BaseAdapter(較常用)、ArrayAdapter、SimpleAdapter加載數(shù)據(jù)的步驟activity的layout中聲明控件在layout/創(chuàng)建ListView的一個(gè)item所需要的layout文件初始化數(shù)據(jù)源初始化適配器setAdapter各自實(shí)現(xiàn)的監(jiān)聽ListView:onItemClickedListeneronItemLongClickedListenerSpinner:(只顯示一項(xiàng)數(shù)據(jù),通過彈出式Dialog從其他數(shù)據(jù)中選擇一項(xiàng))onItemSelectedListenerGridView:android:columnWidthandroid:numColumnandroid:strechModeandroid:horizontalSpacingandroid:verticalSpacingOnItemClickListener/OnItemLongClickListener2、ImageSwitcher為圖片切換提供了簡單動(dòng)畫效果,使用該控件時(shí)必須調(diào)用setFactory()方法來構(gòu)造一個(gè)ImageView控件setImageResource()3、AlertDialogDialogInterface.OnClickListener創(chuàng)建:newAlertDialog.Builder(context).setTitle().setMessage()/.setView(View

view).setPositiveButton().setNegitiveButton().create().show()4、Menu的創(chuàng)建OptionsMenu通過單擊Menu按鍵出現(xiàn)?OverrideonCreateOptionsMenu():設(shè)置菜單項(xiàng)menu.add().setIcon()SubMenusubMenu=menu.addSubMenu()onOptionsItemSelected():處理菜單中某個(gè)子項(xiàng)被選中后的邏輯intid=item.getItemId();ContextMenu通過在控件上長按出現(xiàn)?OverrideonCreateContextMenu()onContextItemSelected()調(diào)用registerForContextMenu(Viewview)方法==>為view設(shè)置ContextMenu四、其他1、數(shù)據(jù)存儲(chǔ)SharedPreferences項(xiàng)目內(nèi)部/shared_prefs/*.xml有格式的存儲(chǔ)簡單私有數(shù)據(jù):long,int,float,boolean,string以key+value形式存儲(chǔ)數(shù)據(jù)SharedPreferenceget()//讀取數(shù)據(jù)edit()//編輯SharedPreference.Editorput()//寫入數(shù)據(jù)commit()//提交寫入的數(shù)據(jù)InternalStorage項(xiàng)目內(nèi)部/files/*.*項(xiàng)目內(nèi)部存儲(chǔ)私有數(shù)據(jù)FileInputStreamfis=openFileInput(name);FileOutputStreamfos=openFileOutput(name,mode);mode:Context.MODE_PRIVATE,Context.MODE_APPENDExternalStorageSD卡存儲(chǔ)public數(shù)據(jù)IO流常用classFile(文件,目錄)FileInputStream,F(xiàn)ileOutputStreamFileReader,F(xiàn)ileWriterBufferedReader(readLine)/BufferedWriterInputStreamReader/OutputStreamWriter字節(jié)流==>字符流)ByteArrayOutputStream(內(nèi)存,toByteArray())String(getBytes(),getBytes(Stringencode),String(byte[]),String(byte[],encode))

ExternalStorage注意:(Environment)先判斷SD卡是否掛載(即sd卡是否可用)MOUNTif(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED){//return;}SD卡根位置不要去描述("/mnt/sdcard"),而是通過方法獲取StringsdPath=Environment.getExternalStorageDirectory().getAbsolutePath();往SD卡寫入數(shù)據(jù)時(shí),需要給出寫入權(quán)限(permission)android.permission.WRITE_EXTERNAL_STORAGE④SQLiteDatabase(SQLite數(shù)據(jù)庫(適用于嵌入式開發(fā)的小規(guī)模數(shù)據(jù)庫))SQL:StructuredQueryLanguage結(jié)構(gòu)化的查詢語言表Table:存儲(chǔ)數(shù)據(jù),一行就是一條數(shù)據(jù)基本SQL語句:增,刪,改,查.sqlite3進(jìn)入數(shù)據(jù)庫客戶端.tables查看當(dāng)前庫下所有表.schema表名查看表結(jié)構(gòu).exit退出SQLite客戶端1)創(chuàng)建表CREATETABLE表名(列1定義,列2定義,)列定義:列名數(shù)據(jù)類型約束數(shù)據(jù)類型:integer,real,text,blob(大二進(jìn)制)其中text類型的值使用單引號''引起來約束:primarykey主鍵約束,要求該列值不能重復(fù)而且不能為null(一個(gè)表中只能有一個(gè)primarykey約束)notnull非空約束,要求該列必須有值autoincrement自增長標(biāo)識列,該列不給出值時(shí)系統(tǒng)會(huì)自動(dòng)賦值;要求該約束必須應(yīng)用在integer并且primarykey歹U上check條件表達(dá)式,要求該列的值必須滿足條件表達(dá)式default值默認(rèn)約束,該列不給值,使用默認(rèn)值foreignkey外鍵約束,約束該列的值只能主表中關(guān)聯(lián)列值,或者該列值為nullEg:CREATETABLEstudent(_idintegerprimarykeyautoincrement,nametextnotnull,teltext,scoreinteger);插入數(shù)據(jù)INSERTINTO表名values(列1值,列2值,...)//每列都要給值,其中autoincrement列可以給值為nullINSERTINTO表名(列1,列2,...)values(列1值,列2值,...)//按照表名后面的列給3)查看數(shù)據(jù)SELECT列1,列2,...//其實(shí)可以使用*代表所有列FROM表名[where條件表達(dá)式]//行過濾條件[groupby分組表達(dá)式[having組條件表達(dá)式]][orderby排序表達(dá)式asc|desc]//查詢數(shù)據(jù)時(shí),默認(rèn)按照主鍵列升序,asc升序,desc降序特殊地:聚合函數(shù)count(*),count(表達(dá)式)count(*)統(tǒng)計(jì)行數(shù),count(表達(dá)式)統(tǒng)計(jì)表達(dá)式的值不為null的行數(shù)sum(表達(dá)式),avg(表達(dá)式)max(表達(dá)式),min(表達(dá)式)條件描述:邏輯運(yùn)算符:and,or,not關(guān)系運(yùn)算符:>,>=,<,<=,=,!=,<>in(值1,值2,...)between...and字符列l(wèi)ike值’:其中描述值時(shí)可以使用_(匹配1個(gè)任意字符)或者%(匹配任意個(gè)任意字符)select*fromstudentwhere_idin(1,3);select*fromstudentwhere_idbetween1and3;selectnamefromstudentwherenamelike'%a%'selectnamefromstudentwherenamelike'a%';selectnamefromstudentwherenamelikeJJa;selectmax(score),min(score)fromstudent;selectcount(*),count(tel)fromstudent;4)更新數(shù)據(jù)updateUPDATE表名SET列名=值,列2名=值,[WHERE條件表達(dá)式]updatestudentsettel='65656512';updatestudentsettel='121212'where_idin(1,3,5,6);updatestudentsetscore=60wherescore<60updatestudentsetscore=score+10wherescore<=90;刪除數(shù)據(jù)deleteDELETEFROM表名[WHERE條件表達(dá)式]DELETEFROMstudentwherescore<=75;刪除表DROPTABLE表名Android項(xiàng)目中操縱SQLite數(shù)據(jù)庫extendsSQLiteOpenHelper(?OverrideonCreate(SQLiteDatabasedb)(db.execSQL("建表語句〃)調(diào)用SQLiteOpenHelper的getReadableDatabase()或者getWritableDatabase()獲取SQLiteDatabase對象SQLiteDatabaseinsert()==>long剛插入的數(shù)據(jù)行idupdate()==>int更新的行數(shù)delete()==>int刪除的行數(shù)query()==>CursorexecSQL()==>voidCursor游標(biāo)查詢結(jié)果集的記錄指針,Cursor起初位置在第一條記錄之前moveXXX(),如moveToNext()==>booleangetXXX(intindex)如getString(1)==>String2、ContentProvider敬據(jù)共享的唯一方式,數(shù)據(jù)存儲(chǔ)在SQLiteDatabase里)query(tableName,columns,where,where,group,having,order)訪問ContentProvider數(shù)據(jù):tableName==>Uri==>類的常量或者一個(gè)字符串常量columns==>類的常量或者字符串ContentResolver:insert(),update(),delete(),query()getContentResolver()Uri初始化:Uri,parse(StringuriStr)==>UriUri字符串形式:1)協(xié)議:〃資源唯一標(biāo)識字符串/資源名1)協(xié)議:〃資源唯一標(biāo)識字符串/資源名/idContentUrisContentProvider中的Uri都遵循"content"協(xié)議ContentUris.withAppendedId(Uri,id)==>Uri3、Intent、Broadcast①Intent借助Intent可以startActvity(),startService(),sendBroadcast()Intent分為顯式Intnet與隱式Intent:顯式Intent一般用于啟動(dòng)自定義的Activity;隱式Intent需要借助Manifest文件中組件的<intent-filter>進(jìn)行解析Intent的組成部分action==>StringsetAction()data==>Uri(Uri.parse(String))setData()category==>Activity需要Intent.CATEGORY_LAUNCHERInteger.CATEGORY_DEFAULT(默認(rèn))Intent.CATEGORY_HOMEIntent.CATEGROY_BROWSABLEextraputExtra(),getXXXExtra()flagIntent.FLAG_ACTIVITY_NEW_TASK如果在一個(gè)BroadcastReceiver中啟動(dòng)Activity,必須給Intent調(diào)用addFlag(),而且參數(shù)是IntentFLAG_ACTIVITY_NEW_TASKIntent傳參Bundle傳遞參數(shù)是一個(gè)自定義class的object,要求該class必須implements接口Serializable或者ParcelableSerializable接口是一個(gè)標(biāo)識性接口,不含任何抽象方法Parcelabel接口:要求實(shí)現(xiàn)所有抽象方法,而且必須含有一個(gè)Parcelable.Creator類型的靜態(tài)域,而且名叫CREATOR]②Broadcast與BroadcastReceiversendBroadcast(intent)發(fā)送廣播action==>Receiver接收,action一致BroadcastReceiver需要注冊manifest.xml中注冊(常駐型廣播Receiver)<receiver><intent-filter><actionandroid:name="能收到的廣播〃/>java代碼注冊(臨時(shí)型廣播Receiver)IntentFilteraddAction()registerReceiver(BroadcastReceiver,IntentFilter)unregisterReceiver(BroadcastReceiver);BroadcastReceiver作用:Broadcast全局事件BroadcastReceiver全局事件監(jiān)聽器及邏輯處理Broadcast發(fā)送方自己系統(tǒng)Broadcast的action4、Service服務(wù)運(yùn)行在后臺;啟動(dòng)可以通過startService(intent);Service并不單獨(dú)開啟線程使用:i,耗時(shí)任務(wù);ii.Activity不在手機(jī)最前端,但是任務(wù)還要繼續(xù)onCreate()==>反復(fù)執(zhí)行onStartCommand()==>onDestroy()注:在Activity中啟動(dòng)Service,即便Activity退出,Service也可以不停止5、AlarmManager、NotificationManagerAlarmManager,TlephonyManager,SmsManager,AssetManager,AppWidgetManager,AudioManager①系統(tǒng)服務(wù)ManagerAssetManager(getAssetManager)==>管理項(xiàng)目下assets/AlarmManager,NotificationManagerSmsManagerTelephonyManager獲取手機(jī)SIM卡相關(guān)信息,手機(jī)網(wǎng)絡(luò)制式相關(guān)信息,手機(jī)呼叫狀態(tài)等信息。

getLine1Number()//本機(jī)號碼getSimSerialNumber()getCallState()//Idel,Ringing,OffHook(摘機(jī))案例:BroadcastReceiver<actionandroid:name=〃ent.action.PHONE_STATE〃/><actionandroid:name=〃ent.action.NEW_OUTGOING_CALL〃/>先判斷action是否是NEW_OUTGOING_CALL獲取打出號碼intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);獲取來電號碼intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);②AlarmManager全局鬧鐘服務(wù),安排某些任務(wù)在將來某一時(shí)刻執(zhí)行(如果設(shè)置時(shí)間是過去時(shí)間,則任務(wù)馬上執(zhí)行)set(inttype,longtimeMillions,PendingIntentpendingIntent)setRepeat(inttype,longtimeMillions,longinterval,PendingIntentpIntent)cancel(PendingIntentpIntent)注:cancel()時(shí),PendingIntent的第四個(gè)參數(shù)flagId一樣并且Intent的action一致。PendingIntent包裝了Intent,類似于Intent的送貨員,包裝了Intent的目標(biāo)組件以及目標(biāo)組件的位置初始化三個(gè)static方法選其一,選擇依據(jù)是Intent要啟動(dòng)的組件類別getActivity(Context,int,Intent,int)getService()getBoroadcast()第二個(gè)參數(shù)int是PendingIntent的requestCode,目前使用0第四個(gè)參數(shù)int是PendingIntent的flag標(biāo)識id,自定義,建議>0NotificationManagernotify()[一般是在Receiver中設(shè)置]cancel()Notification必須設(shè)置三個(gè)屬性:icon,tickerText,whenwhen屬性的值一般是System.currentTimeMillions()必須調(diào)用一個(gè)方法:setLatestEventInfo()一般設(shè)置flags:Notification.FLAG_AUTO_CANCEL時(shí)間相關(guān)class:DategetTime()CalendargetTimeInMillions()System.currentTimeMillions()⑤SmsManager發(fā)送短信權(quán)限:SEND_SMSstaticgetDefault()divideMessage()sendTextMessage()

短息發(fā)送成功接收Receiver,判斷if(getResultCode()==Activity.RESULT_OK)()AudioManager簡介在程序獲取了AudioManager對象之后,接下來就可調(diào)用AudioManager的如下常用方法:adjustStreamVolume(intstreamType,intdirection,intflags):調(diào)整手機(jī)指定類型的聲音。其中第-個(gè)參數(shù)streamType指定聲音類型,該參數(shù)可接受如下幾個(gè)值,STHEAMLALARM;手機(jī)鬧鈴的聲音.STREAM_DTMF;DTMF音調(diào)的聲吊STREAM_MUSIC:手機(jī)音樂的聲音。?STREAM_NOTIF1CATION:系統(tǒng)提示的聲音。STREAM_RING:電話鈴聲的聲音。STREAM_SYSTEM:手機(jī)系統(tǒng)的聲音’STREAM_VO1CE_CALL:語音電話的聲音。第二個(gè)參數(shù)指定對聲音進(jìn)行增大、還是減少;第三個(gè)參數(shù)是調(diào)整聲音時(shí)的標(biāo)志,例如指定FLAG_SHOW_Ub購指定調(diào)整聲音時(shí)顯示音量進(jìn)度條。ad|ustStreamVolume(intstreamType,intdirection,intflags):調(diào)整手機(jī)指定類型的聲音。其中第-個(gè)參數(shù)streamType指定聲音類型?該參數(shù)可接受如下幾個(gè)值。STREAM_ALARM;手機(jī)鬧鈴的聲音*STREAM_DTMF;DTMF音調(diào)的聲音?STREAM_MUSIC:手機(jī)音樂的聲音。STREAM_NOTIF1CATION:系統(tǒng)提示的聲音。STREAM_RING:電話鈴聲的聲音。STREAM^SYSTEM:手機(jī)系統(tǒng)的聲音,STREAM_VO1CE_CALL:語音電話的聲音。第二個(gè)參數(shù)指定對聲?首進(jìn)行增大、還是減少:第三個(gè)參數(shù)是調(diào)整聲音時(shí)的標(biāo)志,例如指定FLAG_SHOW_Ub購指定調(diào)整聲音時(shí)顯示音量進(jìn)度條。LocationManager位置服務(wù)LocationManager與Location經(jīng)緯度LocationProviderGPS:精確度高,耗電量大,流量低NETWORK:精確度低,耗電量小,流量高LocationgetLongitude()經(jīng)度getLatitude()緯度LocationListenerLocationManagerrequestLocationUpdate();Baidu控件MaPView/map/sdk-android.htm添加第三方包權(quán)限<com.baidu.mapapi.MapView...android:clickable="true”/>extendsMapActivity(privateBMapManagerbMapMan;privateMapViewmapView;privateMapViewControllercontroller;?OverrideonCreate()(bMapMan=newBMapManager(this);bMapMan.init(mapKey,null);super.initMapActivity(bMapMan);}bMapMan.start()bMapMan.stop()bMapMan.destroy()GeoPoint需要經(jīng)緯度*1E6MapViewControllersetCenter()//一次animateTo()//移動(dòng)到新的定位位置6.在地圖上增加標(biāo)識extendsOverlay(?Overridedraw()}2)mapView.getOverlays().add(YburOverlayObject)6、多媒體技術(shù)MediaPlaystaticMediaPlayercreate(intresId)//resIc是音頻資源的idreset(),setDataSource(),prepare()start(),pause(),stop(),seekTo(),isPlaying()release()setLooping(),isLooping()setOnCompletionListener()監(jiān)聽當(dāng)前歌曲播放結(jié)束注意:MediaPlayer的以上方法中,部分方法的調(diào)用有先后順序,不能跳躍讀取手機(jī)上的音頻文件Audio.MediaStringalbumUriStr=〃content://media/external/audio/albumart〃;UrialbumUri=Uri.parse(albumUriStr);MediaRecorder錄音(參考api)權(quán)限RECORD_AUDIO保存在sd卡上,文件擴(kuò)展名是amrVideoView<activityandroid:theme=〃@android:style/Theme.Black.NoTitleBar.Fullscreen〃android:screenOrientation=〃landscape〃

setMediaController(newMediaController(context));setVideoPath()start()stopPlayBack()7、Handlerandroid規(guī)定:非主線程不允許更新主線程控件外觀可以通過給主線程Activity的Handler發(fā)消息,Handler收到消息后執(zhí)行更新任務(wù)Service中如果想更新控件外觀,也通過Handler實(shí)現(xiàn)Handler:有兩個(gè)對列:消息Message隊(duì)列;任務(wù)Runnable隊(duì)列發(fā)送消息sendXXXMessage()收到消息后執(zhí)行任務(wù)?OverridehandlerMessage(Messagemsg)(//判斷消息的類別(來源),然后執(zhí)行相應(yīng)的任務(wù)}Message:初始化:i.newii.handler.obtainMessage()四個(gè)public成員變量:intwhat:設(shè)置/獲取消息類別intarg1,arg2:設(shè)置/獲取整數(shù)類型參數(shù)Objectobj:設(shè)置/獲取復(fù)雜類型參數(shù)8、Internet網(wǎng)絡(luò)訪問Browsei,輸入url==>發(fā)出請求Request==>Server查找資源響應(yīng)請求Response<==Request模式:GET與POSTGET:上傳數(shù)據(jù)和url綁定在一個(gè)數(shù)據(jù)包中,格式為url?#數(shù)名=值&參數(shù)2=值&...POST:上傳的數(shù)據(jù)和url分別在不同的數(shù)據(jù)包,上傳數(shù)據(jù)也是需要name/value網(wǎng)絡(luò)請求步驟網(wǎng)絡(luò)訪問權(quán)限初始化連接對象設(shè)置網(wǎng)絡(luò)連接相關(guān)參數(shù)連接時(shí)長、讀取資源時(shí)長、請求方式連接到網(wǎng)絡(luò)如果網(wǎng)絡(luò)響應(yīng)代碼是200,獲取網(wǎng)絡(luò)數(shù)據(jù)(網(wǎng)絡(luò)輸入流)Eg://2)URLurl=newURL(urlStr);HttpURLConnectionconn=(HttpURLConnection)url.openConnection();//3)conn.setConnectTimeout(10*1000);conn.setReadTimeout(10*1000);conn.setRequestMethod(〃GET〃);

//4)conn.connect();//5)if(200==conn.getResponseCode())(InputStreamis=conn.getInputStream();//如果請求的資源是文本,可以獲取編碼StringcontentType=conn.getContentType();Stringencode=null;if(contentType.indexOf('=')>=0)(encode=contentType.substring(contentType.indexOf('=')+1);}}網(wǎng)絡(luò)上數(shù)據(jù)傳輸常用兩種數(shù)據(jù)格式:xml與jsonxml文本,在使用pull或者sax方式進(jìn)行解析時(shí),是基于事件驅(qū)動(dòng)的。五種事件:文檔開始/結(jié)束;標(biāo)記開始/結(jié)束;文本使用PULL方式解析xml數(shù)據(jù)觀察xml文檔,找出你要的數(shù)據(jù);如果數(shù)據(jù)量小,直接將結(jié)果保存進(jìn)變量;否則需要定義class,保存到對象或者集合開始解析初始化XMLPullParser設(shè)置解析源獲取第一個(gè)事件==>文檔開始事件反復(fù)讀取后面的每一個(gè)事件,找出你要的數(shù)據(jù),直到讀取到文檔結(jié)束事件while()SAX解析SAX是一種速度更快,更有效的方法。它逐行掃描文檔,一邊掃描一邊解析。而且相比于DOM,SAX可以在解析文檔的任意時(shí)刻停止解析,但任SAX的工作原理由融林SAX,它既是一個(gè)接口,也是一個(gè)軟件包.但作為接口,SAX是事件驅(qū)動(dòng)型析的一個(gè)標(biāo)準(zhǔn)接口不會(huì)改變SAX的工作原理簡單地說就是對文檔進(jìn)行順序掃描,當(dāng)掃描到文檔(document)開始與結(jié)束、元素(element)開始與結(jié)束、文檔(document)結(jié)束等地方時(shí)通知事件處理函數(shù),由事件處理函數(shù)做相應(yīng)動(dòng)作,然后繼續(xù)同樣的掃描,直至文檔結(jié)束。大多數(shù)SAX都會(huì)產(chǎn)生以下類型的事件:1.在文檔的開始和結(jié)束時(shí)觸發(fā)文檔處理事件。在文檔內(nèi)每一XM頃素接受解析的前后觸發(fā)元素事件。3.任何元數(shù)據(jù)通常由單獨(dú)的事件處理何事物都有其相反的一面,對于命繇域說就是操作復(fù)雜。對于解析過程中的每一步都會(huì)有事件發(fā)生,都會(huì)觸發(fā)相應(yīng)接口中的事件處理程序。編寫程序的^^:通知主機(jī)應(yīng)用程序解析錯(cuò)誤。(1).創(chuàng)建事件處理程序(也就是編寫ContentHandler的實(shí)現(xiàn)類,一般繼承自DefaultHandler類,采用adapter模式)

.創(chuàng)建SAX解析器.將事件處理程序分配到解析器.對文檔進(jìn)行解析,將每個(gè)事件發(fā)送給事件處理程序SAX模型過程:首先SAXParserFactory來創(chuàng)建一個(gè)SAXParserFacto書?例SAXParserFactoryfactory二SAXParserFactory.newInstancef);根據(jù)SAXParserFactory^例來創(chuàng)建SAXParserS.SAXParserj^生SAXR的如rXMLReaderreader=factory.newSAXParserQ.getXMLReaderO;4.XMLReader加載XML,然后解析XML,在解析的過程中觸發(fā)相對于接口中的事件處理程序9、WebView加載數(shù)據(jù)loadData(String,〃text/html〃,〃utf-8〃);loadUrl(url);設(shè)置支持JS,ZoomwebView.getSettings().setSupportZoom(true);webView.getSettings().setBuiltInZoomControls(true);webView.getSettings().setJavaScriptEnabled(true);設(shè)置進(jìn)度條設(shè)置web內(nèi)容在當(dāng)前WebView中顯示設(shè)置“返回”按鍵的動(dòng)作是退回歷史記錄設(shè)置當(dāng)前WebView所在的Activity是瀏覽器manifest.xml獲取應(yīng)用程序外部傳遞的urlgetIntent().getData().toString()TextView內(nèi)容設(shè)置為超級連接:Stringurl=〃網(wǎng)址〃;Stringshow="TextView所顯示的文字〃;tv.setText(Html.fromHtml(〃<ahref=\〃〃+url+〃\〃>〃+show+〃</a>〃));tv.setMovementMethod(LinkMovementMethod.getInstance());10、OnGestureListener手勢監(jiān)聽1)extendsActivityimplementsOnGestureListener(privateGestureDetectorgesture;

?OverrideonTouchEvent(MotionEventev)(returngesture.onTouchEvent(ev);}//onGestureListener應(yīng)該實(shí)現(xiàn)的抽象方法?OverrideonFling(MotionEventel,MotionEvente2,)(左右滑動(dòng)的判定:el和e2的x值之差xl-x2>距離==>自右向左x2-xl>距離==>自左向右}extendsViewimplementsOnGestureListener(privateGestureDetectorgesture;?OverrideonTouch(MotionEventevent)(returngesture.onTouchEvent(event);}?OverridedispatchTouchEvent(MotionEventev)(if(gesture.onTouchEvent(ev))(ev.setAction(MotionEvent.ACTION_CANCEL);}returnsuper.dispatchTouchEvent(ev);};//onGestureListener應(yīng)該實(shí)現(xiàn)的抽象方法?OverrideonFling(MotionEventel,MotionEvente2,)(左右滑動(dòng)的判定:el和e2的x值之差xl-x2>距離==>自右向左x2-xl>距離==>自左向右}}11、項(xiàng)目中添加sdk以外的其他類庫項(xiàng)目中創(chuàng)建一個(gè)文件夾,命名為libs將第三方j(luò)ar文件拷貝到libs中選中該jar文件,右鍵:BuildPath==>AddtobuildPath然后該jar包中的class就可以在項(xiàng)目中被使用12、ViewPager內(nèi)置有手勢左右方向滑動(dòng)的View切換處理需要android-support-v4.jarlayout中聲明控件<android.support.v4.ViewPager.../>適配器:extendsPageAdapter*成員變量:Context,List<View>

*還要重寫兩個(gè)方法:instantiateItem(),destroyItem()準(zhǔn)備數(shù)據(jù)源List<View>//添加layout:控件不需要監(jiān)聽器;添加Activitydata.add(LayoutInflater.from(this).inflate(R.layout.page1,null));LocalActivityManageractivityMan=newLocalActivityManager(this,true);activityMan.dispatchCreate(savedInstanceState);ViewpageView2=activityMan.startActivity(〃page2〃,newIntent(this,Page2.class)).getDecorView();data.add(pageView2);viewPager.setAdapter(adapter)ViewPager監(jiān)聽器setOnPageChangeListener13、AppWidget1、創(chuàng)建步驟:1)layout/*.xml描述AppWidget外觀定義一個(gè)classextendsAppWidgetProviderres/xml/*.xml==>AppWidgetProviderInfo描述AppWidget的元數(shù)據(jù)manifest.xml注冊AppWidget<receiverandroid:name=〃MyAppWidget〃><intent-filter><actionandroid:name=〃android.appwidget.action.APPWIDGET_UPDATE〃/></intent-filter><meta-dataandroid:name=〃vider〃android:resource=〃@xml/providerinfo〃/></receiver>2、AppWidget中控件所顯示數(shù)據(jù)的更新,或者控件添加監(jiān)聽器的實(shí)現(xiàn)RemoteViewsAppWidagetManagerAppWidgetManagerappMan=AppWidgetMana

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論