實驗四 Android基本組件交互實驗.doc_第1頁
實驗四 Android基本組件交互實驗.doc_第2頁
實驗四 Android基本組件交互實驗.doc_第3頁
實驗四 Android基本組件交互實驗.doc_第4頁
實驗四 Android基本組件交互實驗.doc_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實驗四 Android基本組件交互實驗【實驗?zāi)康摹?本實驗是Android基本組件實驗,主要針對Activity、Service和Receiver實現(xiàn)和使用方法。通過實驗使學(xué)生掌握Activity的跳轉(zhuǎn)、Service的啟動停止以及Receiver的接受等?!緦嶒炓蟆縰 使得學(xué)生熟悉Activity、Service和BroadCast基本使用;u 使得學(xué)生掌握短信接收實現(xiàn)和使用;u 使得學(xué)生掌握界面跳轉(zhuǎn)基本原理和使用方法;u 使得學(xué)生掌握服務(wù)和廣播的基本機制?!緦嶒炘怼?. Activity跳轉(zhuǎn)startActivity跳轉(zhuǎn)到目標頁面,參數(shù)為Intent;startActivityForResult 跳轉(zhuǎn)到下一個Activity,而當(dāng)這個Activity被關(guān)閉以后,自動跳轉(zhuǎn)前一個Activity,并調(diào)用onActivityResult( )方法,參數(shù)為Intent和requestcode2. IntentAndroid基本的設(shè)計理念是鼓勵減少組件間的耦合,因此Android提供了Intent (意圖) ,Intent提供了一種通用的消息系統(tǒng),將要執(zhí)行的動作的抽象的描述,一般來說是作為參數(shù)來使用,由Intent來協(xié)助完成Android各個組件之間的通訊 。Intent屬性:n Action ,對執(zhí)行動作的描述,在Intent類中定義了一些字符串常量作為標準動作;n data ,是對執(zhí)行動作所要操作的數(shù)據(jù)的描述,Android中采用URI來表示數(shù)據(jù);例:VIEW_ACTION content:/contacts/1表示顯示標識符為”1的聯(lián)系人的詳細信息。n catagory 類別,是被執(zhí)行動作的附加信息;n extra 附加信息,除了data之外,還可以通過extra附加信息,extra屬性使用Bundle類型進行數(shù)據(jù)傳遞;n component 組件,顯式指定Intent的目標組件的名稱;n type 數(shù)據(jù)類型,顯式指定Intent的數(shù)據(jù)類型;3. Service組件Service一般由一個Activity或其他Context對象來啟動,當(dāng)啟動Service之后,該Service將會在后臺運行,及時啟動這個Service的Activity或其他組件的生命周期已經(jīng)結(jié)束,Service仍然會繼續(xù)運行,直到自己的生命周期結(jié)束為止。每個Service都應(yīng)該在ndroidManifest.xml中進行聲明。Service的啟動方式有兩種,對應(yīng)的生命周期也各不相同。通過startService方法啟動。當(dāng)系統(tǒng)調(diào)用startService方法,如果該Service還未啟動,則依法調(diào)用其onCreate方法和onStart方法來啟動。當(dāng)其他Context對象調(diào)用stopService方法、Service調(diào)用自身的stopSelf或stopService方法時才會停止Service的執(zhí)行。通過bindService方法啟動。當(dāng)系統(tǒng)調(diào)用bindService方法時,如果該Service未啟動,則會調(diào)用onCreate方法完成初始化工作,然后會將該Service和Context對象(如Activity)進行綁定,當(dāng)被綁定的Context對象被銷毀時,與之綁在一起的Service也會停止運行。4. Broadcast Receiver組件Broadcast Receiver同Service一樣,并不提供與用戶交互的表示層,其實是一種負責(zé)接收廣播消息并對消息作出反應(yīng)的組件。在Android的系統(tǒng)中就存在許多這樣的廣播,比如電池電量過低或信號過低時,系統(tǒng)就會發(fā)出廣播進行通知。應(yīng)用程序如果需要響應(yīng)某一個廣播消息,應(yīng)該注冊對應(yīng)的BroadcastReceiver對象,該對象繼承自BroadcastReceiver類,該類位于android.content包。這樣一來當(dāng)系統(tǒng)或另外的應(yīng)用程序發(fā)出特定廣播時,該應(yīng)用程序就可以接受并做出回應(yīng),如啟動Activity等。接受廣播的時候就需要通過IntentFilter對象來進行過濾。BroadcastReceiver的生命周期比較簡單,其只有一個回調(diào)方法-onReceiver,該方法在應(yīng)用程序接受到發(fā)給自己的廣播的時候調(diào)用,所以BroadcastReceiver的使用方法也相對簡單,只需要對onReceive方法進行合理重寫,在適當(dāng)?shù)牡胤阶栽揃roadcastReceiver即可。注冊BroadcastReceiver對象的方式有以下兩種。在AndroidMannifest.xml文件中聲明。注冊信息包裹在標簽中,并在標簽內(nèi)設(shè)定過濾規(guī)則。在代碼中創(chuàng)建并設(shè)置IntentFilter對象。該IntentFilter對象包含了對廣播的過濾規(guī)則,然后在需要的地方調(diào)用Context.registerReceiver方法和Context.unregisterReceiver方法進行注冊和取消注冊,如果采用這種方式注冊的話,當(dāng)Context對象被銷毀時,該BroadcastReceiver也就不復(fù)存在了?!緦嶒瀮?nèi)容】1.接收短信、開啟和停止服務(wù)的界面布局;2.實現(xiàn)短信接收服務(wù);3.接收廣播信息?!緦嶒灤a】/strings.xml Intent Settings Hello world!無短信啟動停止/activity_main.xml /AndroidManifest.xml !- - /MainActivity.javapackage ent;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.content.IntentFilter;import android.view.Menu;import android.view.View;import android.widget.Button;public class MainActivity extends Activity Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button bt1=(Button)findViewById(R.id.btn1);bt1.setOnClickListener(new View.OnClickListener() Overridepublic void onClick(View arg0) / TODO Auto-generated method stubIntent intent = new Intent(ent.SMSService);startService(intent);/啟動服務(wù));Button bt2=(Button)findViewById(R.id.btn2);bt2.setOnClickListener(new View.OnClickListener() Overridepublic void onClick(View v) / TODO Auto-generated method stubIntent intent = new Intent(ent.SMSService);stopService(intent);/停止服務(wù));/SMSService.javapackage ent;import android.app.Service;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.IBinder;import android.widget.Toast;/* * author Administrator * */public class SMSService extends Serviceprivate static BCReceiver bcReceiver;static String SMS_ACTION = vider.Telephony.SMS_RECEIVED;public SMSService() / TODO Auto-generated constructor stubprivate void registerReceiver(BCReceiver bcReceiver2, IntentFilter filter) / TODO Auto-generated method stub/* (non-Javadoc) * see android.app.Service#onCreate() */Overridepublic void onCreate() / TODO Auto-generated method stubsuper.onCreate();bcReceiver = new BCReceiver();IntentFilter filter = new IntentFilter();filter.addAction(SMS_ACTION);SMSService.this.registerReceiver(bcReceiver,filter);System.out.println(Service create!);Overridepublic IBinder onBind(Intent intent) / TODO Auto-generated method stubreturn null;/BCReceiver.javapackage ent;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import .Uri;import android.os.Bundle;import android.telephony.SmsManager;import android.telephony.SmsMessage;import android.widget.Toast;public class BCReceiver extends BroadcastReceiverStringBuilder builder = new StringBuilder();public BCReceiver() / TODO Auto-generated constructor stubOverridepublic void onReceive(Context arg0, Intent arg1) / TODO Auto-generated method stubSystem.out.println(SMS Received!);Intent intent = null;Bundle bundle = intent.getExtras();/讀取短消息的標簽pdusObject myOBJpdus = (Object)bundle.get(pdus);SmsMessage messages = new SmsMessagemyOBJpdus.length;for(int i = 0; imyOBJpdus.length; i+)messagesi = SmsMessage.createFromPdu(byte) myOBJpdusi);builder.append(messagesi.getDisplayMessageBody();System.out.println(builder);Context context = null;Intent smsintent = new Intent(context,MainActivity.class);smsintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);smsintent.putExtra(SMS, builder.toString();context.startActivity(smsintent);builder.setLength(0);/回傳消息String sender = messages0.getOriginatingAddress();System.out.println(sender+);SmsManager manager = SmsManager.getDefault();manager.sendTextMessage(sender, null, Hello World!, null, null);Toast.makeText(context, Message has been sent, 5000).show();/回撥電話Intent intentcall=new Intent(Intent.ACTION_CALL,Uri.parse(tel:+sender);intentcall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intentcall);【實驗代碼】界面布局按啟動:發(fā)送信息:收到信息:六

溫馨提示

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

評論

0/150

提交評論