版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第13章Service本章目標(biāo)掌握Service與Activity的區(qū)別;掌握Service的定義及使用;可以使用ServiceConnection
接口綁定一個(gè)Service;了解系統(tǒng)提供的Service程序。認(rèn)識Service在Android系統(tǒng)開發(fā)之中,Services是一個(gè)重要的組成部分。如果現(xiàn)在某些程序需要中的部分操作是很消耗時(shí)間的,那么可以將這些程序定義在Service之中,這樣就可以完成程序的后臺運(yùn)行(也可以在不顯示界面的形式下運(yùn)行),即:Services實(shí)際上就相當(dāng)于是一個(gè)沒有圖形界面的Activity程序,而且當(dāng)用戶要執(zhí)行某些操作需要進(jìn)行跨進(jìn)程
的時(shí)候也可以使用Service來完成。Service的基本組成Service是一個(gè)沒有UI界面的操作組件,主要的功能是為Activity程序提供一些必要的支持,例如:
中的Mp3
,當(dāng)回到桌面上的時(shí)候這些組件依然可以運(yùn)行,實(shí)際上這些就屬于Service的功能,在開發(fā)時(shí)用戶只需要繼承自android.app.Service類就可以完成Service程序的開發(fā),在Service之中也有自己的生命周期方法。Service的生命周期控制方法No.方法及常量類型描述1public
static
final
intSTART_CONTINUATION_MASK常量繼續(xù)執(zhí)行Service2public
static
final
int
START_STICKY常量用于顯式的啟動(dòng)和停止Service3public IBinder
onBind(Intent
intent)普通設(shè)置Activity和Service之間的綁定4public
void
onCreate()普通當(dāng)一個(gè)Service創(chuàng)建時(shí)調(diào)用5public
int mand(Intent
intent,
int
flags,int
startId)普通啟動(dòng)Service,由startService()方法觸發(fā)6public
void
onDestroy()普通Service銷毀時(shí)調(diào)用,由stopService()方法觸發(fā)Activity類中操作Service的方法No.方法類型描述1publicComponentName
startService(Intentservice)普通啟動(dòng)一個(gè)Service2public
booleanstopService(Intent
name)普通停止一個(gè)Service3public
boolean
bindService(Intent
service,ServiceConnection
conn,
int
flags)普通與一個(gè)Service綁定4public
void
unbindService(ServiceConnectionconn)普通取消與一個(gè)Service的綁定范例:定義服務(wù)定義用戶的Service組件——MyServiceUtil.java//必須繼承Service//綁定Activityimport
android.app.Service;import
android.content.Intent;import
android.os.IBinder;public
class
MyServiceUtil
extends
Service
{@Overridepublic
IBinder
onBind(Intent
intent)
{returnnull;}@Overridepublic
void
onCreate()
{//創(chuàng)建時(shí)調(diào)用System.out.println("***
Service
onCreate()");}@Overridepublic
void
onDestroy(){
//銷毀時(shí)調(diào)用System.out.println("***
Service
onDestroy()");}//開始Service@Overridepublicint
mand(Intent
intent,
int
flags,
int
startId)
{System.out.println("***
Service
onStart()
-->
Intent
=
"
+
intent+"
,
startId
=
"+startId);return
Service.START_CONTINUATION_MASK
;
//繼續(xù)執(zhí)行Service}}范例:定義布局管理器<?xml
version="1.0"
encoding="utf-8"?><LinearLayoutxmlns:android="http://s→
定義線型布局管理器/apk/res/android"android:orientation="vertical"→所有組件垂直擺放android:layout_width="fill_parent"→布局管理器的寬度為屏幕寬度android:layout_height="fill_parent">→布局管理器的高度為屏幕高度<Button→定義按鈕組件android:id="@+id/start"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="啟動(dòng)Service"
/>→默認(rèn)顯示文字<Button→定義按鈕組件android:id="@+id/stop"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="停止Service"/>→默認(rèn)顯示文字</LinearLayout>范例:定義Activity程序,操作Service//定義按鈕//定義按鈕public
class
MyServiceDemo
extends
Activity
{private
Button
start;private
Button
stop;@Overridepublic
void
onCreate(Bundle
savedInstanceState){super.onCreate(savedInstanceState);super.setContentView(R.layout.main);this.start
=
(Button)
super.findViewById(R.id.start);this.stop
=
(Button)
super.findViewById(R.id.stop);//調(diào)用布局文件//取得組件//取得組件this.start.setOnClickListener(new
StartOnClickListenerImpl())
;this.stop.setOnClickListener(new
StopOnClickListenerImpl())
;//單擊事件//單擊事件}//啟動(dòng)Service//停止Serviceprivate
class
StartOnClickListenerImpl
implements
OnClickListener
{@Overridepublic
void
onClick(View
v)
{MyServiceDemo.this.startService(new
Intent(MyServiceDemo.this,
MyServiceUtil.class));}}private
class
StopOnClickListenerImpl
implements
OnClickListener
{@Overridepublic
void
onClick(View
v)
{MyServiceDemo.this.stopService(new
Intent(MyServiceDemo.this,
MyServiceUtil.class));}}}配置Service一個(gè)Service程序編寫完成之后還需要在項(xiàng)目中,的AndroidManifest.xml文件之中進(jìn)行在<application>節(jié)點(diǎn)下添加如下的代碼:<service
android:name=".MyServiceUtil"
/>綁定Service當(dāng)一個(gè)Service啟動(dòng)之后,如果沒有出現(xiàn)意外以及明確的調(diào)用stopService()方法的話則將會一直駐留在
的服務(wù)之中,如果現(xiàn)在希望被一個(gè)Activity啟動(dòng)的Service可以在Activity程序結(jié)束后自動(dòng)結(jié)束,則可以將一個(gè)Activity和
Service進(jìn)行綁定,在Activity類中專門提供了一個(gè)用于綁定Service的bindService()方法,但是在此方法返回的是一個(gè)
android.content.ServiceConnection接口的參數(shù)ServiceConnection接口定義的方法No.方法類型描述1public void
onServiceConnected(ComponentName
name,
IBinder
service)普通當(dāng)與一個(gè)Service建立連接的時(shí)候調(diào)用2public
voidonServiceDisconnected(ComponentNamename)普通當(dāng)與一個(gè)Service取消連接的時(shí)候調(diào)用IBinder接口ServiceConnection接口主要的功能是當(dāng)一個(gè)Activity程序與Service建立連接之后,可以通過ServiceConnection接口執(zhí)行Service連接(或取消)連接的處理操作,在Activity連接到Service程序上之后,會觸發(fā)Service類中的onBind()方法,在此方法中要返回一個(gè)android.os.IBinder接口的對象。IBinder接口的常量和方法No.常量及方法類型描述1public
static
final
int
DUMP_TRANSACTION常量IBinder協(xié)議的事務(wù)碼:清除 狀態(tài)2public
static
final
int
_CALL_TRANSACTION常量用戶指令的第一個(gè)事務(wù)碼可用3publicstatic
final
int
FLAG_ONEWAY常量transact()方法單向調(diào)用的標(biāo)志位,表示調(diào)用者不會等待從被調(diào)用者那里返回的結(jié)果,而立即返回4publicstatic
final
int
INTERFACE_TRANSACTION常量IBinder協(xié)議的事務(wù)碼:向事務(wù)接收端詢問其完整的接口規(guī)范5public
static
final
int
LAST_CALL_TRANSACTION常量用戶指令的最后一個(gè)事務(wù)碼可用6public
static
final
int
_TRANSACTION常量IBinder協(xié)議的事務(wù)碼:
Binder()7public void
dump(FileDescriptorfd,
String[]
args)方法向指定的數(shù)據(jù)流輸出對象狀態(tài)8public String
getInterfaceDescriptor()方法取得被Binder對象所支持的接口名稱9public boolean
isBinderAlive()方法檢查Binder所在的進(jìn)程是否活著10public void
linkToDeath(IBinder.DeathRecipient
recipient,
intflags)方法如果指定的Binder
,則為通知 一個(gè)新的11public
boolean
Binder()方法檢查 對象是否存在12public IInterface
queryLocalInterface(String
descriptor)方法取得對一個(gè)接口綁定對象本地實(shí)現(xiàn)13public booleantransact(int
code,
Parcel
data,
Parcel
reply,
intflags)方法執(zhí)行一個(gè)一般的操作14public boolean
unlinkToDeath(IBinder.DeathRecipientrecipient,
int
flags)方法刪除一個(gè)接收通知的范例:定義Service類——MyService.java//必須繼承Servicepublic
class
MyServiceUtil
extends
Service
{private
IBinder
myBinder
=
new
Binder(){@Overridepublic
String
getInterfaceDescriptor(){//取得接口描述信息return
"MyService
class.";//返回Service類的名稱}}
;//綁定時(shí)觸發(fā)@Overridepublic
IBinder
onBind(Intent
intent){System.out.println("***
Service
onBind()
Intent
=
"
+
intent)
;return
myBinder;
}@Override//重新綁定時(shí)觸發(fā)public
void
onRebind(Intent
intent)
{System.out.println("***Service
onRebind()
Intent
=
"
+intent);super.onRebind(intent);
}@Overridepublic
boolean
onUnbind(Intent
intent){
//解除綁定時(shí)觸發(fā)System.out.println("***
Service
onUnbind()
Intent
=
"+
intent);}return
super.onUnbind(intent);@Overridepublic
void
onCreate()
{//創(chuàng)建時(shí)觸發(fā)System.out.println("***
Service
onCreate()");}super.onCreate();@Overridepublic
void
onDestroy()
{//銷毀時(shí)觸發(fā)System.out.println("***
Service
onDestroy()");super.onDestroy();}@Overridepublic
intmand(Intent
intent,
int
flags,
int
startId)
{//啟動(dòng)時(shí)觸發(fā)System.out.println("***
Servicemand()
Intent
=
"
+
intent);return
Service.START_CONTINUATION_MASK;}}定義布局管理器——main.xml<?xml
version="1.0"
encoding="utf-8"?><LinearLayout→線型布局xmlns:android="http://s
/apk/res/android"android:orientation="vertical"→所有組件垂直擺放android:layout_width="fill_parent"→布局管理器的寬度為屏幕寬度android:layout_height="fill_parent">→布局管理器的高度為屏幕高度<Button→按鈕組件android:id="@+id/start"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="啟動(dòng)Service"/>→默認(rèn)顯示文字<Button→按鈕組件android:id="@+id/stop"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="停止Service"/>→默認(rèn)顯示文字<Button→按鈕組件android:id="@+id/bind"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="綁定Service"/>→默認(rèn)顯示文字<Button→按鈕組件android:id="@+id/unbind"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="解除綁定Service"/>→默認(rèn)顯示文字</LinearLayout>定義Activity程序,操作Servicepublic
class
MyServiceDemo
extends
Activity
{//定義按鈕//定義按鈕//定義按鈕private
Button
start;private
Button
stop;private
Button
bind;private
Button
unbind;//定義按鈕private
ServiceConnection
serviceConnection
=
new
ServiceConnection(){@Overridepublic
void
onServiceConnected(ComponentName
name,try
{IBinder
service){
//連接到ServiceSystem.out.println("###
Service
Connect
Success.
service
=
"+
service.getInterfaceDescriptor());}
catch
(RemoteException
e)
{e.printStackTrace();}}@Overridepublic
void
onServiceDisconnected(ComponentName
name){//與Service斷開連接System.out.println("###
Service
Connect
Failure.");}};定義Activity程序,操作Service//調(diào)用布局文件//取得組件//取得組件//取得組件@Overridepublic
void
onCreate(Bundle
savedInstanceState){super.onCreate(savedInstanceState);super.setContentView(R.layout.main);this.start
=
(Button)
super.findViewById(R.id.start);this.stop
=
(Button)
super.findViewById(R.id.stop);this.bind
=
(Button)
super.findViewById(R.id.bind);this.unbind
=
(Button)
super.findViewById(R.id.unbind);//取得組件this.start.setOnClickListener(new
StartOnClickListenerImpl())
;this.stop.setOnClickListener(new
StopOnClickListenerImpl())
;this.bind.setOnClickListener(new
BindOnClickListenerImpl())
;this.unbind.setOnClickListener(new
UnbindOnClickListenerImpl())
;//單擊事件//單擊事件//單擊事件//單擊事件}private
class
StartOnClickListenerImpl
implements
OnClickListener
{@Overridepublic
void
onClick(View
v)
{MyServiceDemo.this.startService(new
Intent(MyServiceDemo.this,MyServiceUtil.class));//啟動(dòng)Service}}private
class
StopOnClickListenerImpl
implements
OnClickListener
{@Overridepublic
void
onClick(View
v)
{MyServiceDemo.this.stopService(new
Intent(MyServiceDemo.this,MyServiceUtil.class));//停止Service}}定義Activity程序,操作Serviceprivate
class
BindOnClickListenerImpl
implements
OnClickListener
{@Overridepublic
void
onClick(View
v)
{MyServiceDemo.this.bindService(new
Intent(MyServiceDemo.this,MyServiceUtil.class),MyServiceDemo.this.serviceConnection,Context.BIND_AUTO_CREATE);
//綁定Servic}}private
class
UnbindOnClickListenerImpl
implements
OnClickListener
{@Overridepublic
void
onClick(View
v)
{MyServiceDemo.this.unbindService(MyServiceDemo.this.serviceConnection);//取消Service綁定}}}范例:解決but如果現(xiàn)在沒有服務(wù)與Activity進(jìn)行綁定而又調(diào)用了解除綁定操作,則會出現(xiàn)錯(cuò)誤,所以在解除綁定之前必須要增加一個(gè)判斷,即:判斷一個(gè)
Activity是否和一個(gè)Service綁定在了一起,如果綁定在了一起才可以使用unbindService()方法解除綁定。一般的做法是定義一個(gè)標(biāo)記性的操作接口,而后在Activity中判斷此接口對象是否為null來決定是否綁定了Service,這樣說比較抽象,下面通過一個(gè)實(shí)際的代碼來觀察,本程序?yàn)榱朔奖?,只提供了綁定服?wù)與解除綁定兩個(gè)操作。范例:定義布局管理器——main.xml<?xml
version="1.0"
encoding="utf-8"?><LinearLayout→線型布局xmlns:android="http://s
/apk/res/android"android:orientation="vertical"→所有組件垂直擺放android:layout_width="fill_parent"→布局管理器的寬度為屏幕寬度android:layout_height="fill_parent">→布局管理器的高度為屏幕高度<Button→按鈕組件android:id="@+id/bind"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="綁定Service"/>→默認(rèn)顯示文字<Button→按鈕組件android:id="@+id/unbind"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="解除綁定Service"/>→默認(rèn)顯示文字</LinearLayout>范例:定義標(biāo)記性接口——IServicepublic
interface
IService
{}范例:定義服務(wù)類——MyServiceUtil//必須繼承Service定義IBinderimport
android.app.Service;import
android.content.Intent;import
android.os.Binder;import
android.os.IBinder;public
class
MyServiceUtil
extends
Service
{
private
IBinder
myBinder
=
new
BinderImpl();
//@Overridepublic
IBinder
onBind(Intent
intent)
{//綁定時(shí)觸發(fā)System.out.println("***
Service
onBind()
Intent
=
"
+
intent)
;return
myBinder;}//取得接口描述信息//返回Service類的名稱class
BinderImpl
extends
Binder
implements
IService
{@Overridepublic
String
getInterfaceDescriptor()
{return
"MyService
class.";}}}定義Activity程序,綁定服務(wù)//定義按鈕public
class
MyServiceDemo
extends
Activity
{private
Button
bind;private
Button
unbind;//定義按鈕private
ServiceConnection
serviceConnection
=
new
ServiceConnectionImpl();private
IService
service
=
null
;@Overridepublic
void
onCreate(Bundle
savedInstanceState)
{super.onCreate(savedInstanceState);super.setContentView(R.layout.main);this.bind
=
(Button)
super.findViewById(R.id.bind);//調(diào)用布局文件//取得組件this.unbind
=
(Button)
super.findViewById(R.id.unbind);
//
取得組件this.bind.setOnClickListener(new
BindOnClickListenerImpl())
;
//單擊事件this.unbind.setOnClickListener(new
UnbindOnClickListenerImpl())
;
//單擊事件}private
class
BindOnClickListenerImpl
implements
OnClickListener
{@Overridepublic
void
onClick(View
v)
{MyServiceDemo.this.bindService(new
Intent(MyServiceDemo.this,MyServiceUtil.class),MyServiceDemo.this.serviceConnection,Context.BIND_AUTO_CREATE);//綁定Service}}private
class
UnbindOnClickListenerImpl
implements
OnClickListener
{@Overridepublic
void
onClick(View
v)
{if(MyServiceDemo.this.service
!=
null){MyServiceDemo.this.unbindService(MyServiceDemo.this.serviceConnection);MyServiceDemo.this.service
=null
;//清空標(biāo)記}}}private
class
ServiceConnectionImpl
implements
ServiceConnection
{@Overridepublic
voidonServiceConnected(ComponentNamename,IBinderservice){//連接到ServiceMyServiceDemo.this.service
=(BinderImpl)service;//取得IService接口對象}@Overridepublic
void
onServiceDisconnected(ComponentName
name){//與Service斷開連接}}}Context類中定義的系統(tǒng)服務(wù)No.常量類型描述1public
static
final
String
CLIPBOARD_SERVICE常量剪貼板服務(wù)2public
static
final
String
WINDOW_SERVICE常量窗口服務(wù)3public
static
final
String
ALARM_SERVICE常量鬧鈴服務(wù)4public
static
finalString
AUDIO_SERVICE常量音頻服務(wù)5public
static
final
String
NOTIFICATION_SERVICE常量Notification服務(wù)6public
static
final
String
SEARCH_SERVICE常量搜索服務(wù)7public
static
finalString
POWER_SERVICE常量電源管理服務(wù)8public
static
finalString
WIFI_SERVICE常量WIFI服務(wù)9public
static
final
String
ACTIVITY_SERVICE常量運(yùn)行程序服務(wù)范例:剪貼板服務(wù)范例:定義布局管理器——main.xml線型布局管理器<?xml
version="1.0"
encoding="utf-8"?><LinearLayoutxmlns:android="http://sandroid:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><EditTextandroid:layout_width="fill_parent"→/apk/res/android"→→→→→android:layout_height="wrap_content"
/>
→所有組件垂直擺放布局管理器的寬度為屏幕寬度布局管理器的高度為屏幕高度文本輸入框組件寬度為屏幕寬度組件高度為文字高度</LinearLayout>范例:定義Activity程序,操作剪貼板public
class
MyClipboardDemo
extends
Activity
{@Overridepublic
void
onCreate(Bundle
savedInstanceState)
{super.onCreate(savedInstanceState);super.setContentView(R.layout.main);//設(shè)置布局管理器ClipboardManager
clipboardManager
=
(ClipboardManager)super.getSystemService(Context.CLIPBOARD_SERVICE);
//取得剪貼板clipboardManager.setText(“jereh");//設(shè)置剪貼板中的內(nèi)容}}范例:取得正在運(yùn)行的Activity程序信息ActivityManagerAndroid
由于采用了多任務(wù)的設(shè)計(jì),所以可以同時(shí)運(yùn)行多個(gè)Activity程序,而用戶如果要想取得這些Activity程序的信息,就可以通過
“ACTIVITY_SERVICE”服務(wù)取得所有運(yùn)行的程序,但是此時(shí)通過
super.getSystemService()方法取得的服務(wù)對象的類型為“android.app.ActivityManager”。ActivityManager類的常用方法No.方法類型描述1publicList<ActivityManager.RunningAppProcessInfo>
getRunningAppProcesses()普通取得所有的正在運(yùn)行的進(jìn)程信息2publicList<ActivityManager.RunningServiceInfo>
getRunningServices(int
maxNum)普通取得指定個(gè)數(shù)的服務(wù)信息3publicList<ActivityManager.RunningTaskInfo>getRunningTasks(int
maxNum)普通取得指定個(gè)數(shù)的任務(wù)信息4public
void
killBackgroundProcesses
(StringpackageName)普通銷毀一個(gè) 進(jìn)程,必須設(shè)置“KILL_BACKGROUND_PROCESSES”權(quán)限5public
ConfigurationInfogetDeviceConfigurationInfo()普通取得設(shè)備的配置信息ActivityManager類取得任務(wù)信息當(dāng)使用ActivityManager類取得任務(wù)信息的時(shí)候有三個(gè)方法:getRunningTasks()返回List<ActivityManager.RunningTaskInfo>對象;getRunningServices()返回List<ActivityManager.RunningServiceInfo>對象;getRunningAppProcesses()返回List<ActivityManager.RunningAppProcessInfo>對象;ActivityManager.RunningTaskInfo類的常用屬性No.屬性類型描述1public
ComponentName
baseActivity屬性取得程序運(yùn)行開始的Activity2public
CharSequence
description屬性取得該Activity的描述信息3public
int
id屬性取得任務(wù)的唯一ID4public
int
numActivities屬性取得所有運(yùn)行的Activity數(shù)量,包括已經(jīng)停止的5public
int
numRunning屬性取得所有運(yùn)行的Activity數(shù)量,不包含已停止的6public
Bitmap
thumbnail屬性取得任務(wù)的圖標(biāo)7publicComponentNametopActivity屬性取得當(dāng)前用戶正在操作的Activity信息范例:定義布局管理器——main.xml→
線性布局管理器/apk/res/android"<?xml
version="1.0"
encoding="utf-8"?><LinearLayoutxmlns:android="http://s
android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><ListViewandroid:id="@+id/tasklist"android:layout_width="fill_parent"→→→→→→→所有組件垂直擺放布局管理器寬度為屏幕寬度布局管理器高度為屏幕高度定義ListView組件組件ID,程序中使用組件寬度為屏幕寬度組加高度為內(nèi)容高度android:layout_height="wrap_content"
/></LinearLayout>定義Activity程序,列表顯示所有運(yùn)行的Activity程序public
class
MyActivityRunDemo
extends
Activity
{private
ActivityManager
activityManager
=
null;istAdapter
adapter
=
null;//ActivityManager對象//適配器組件privaprivaprivaist<String>all
=new
ArrayList<String>();//保存信息istView
tasklist
=
null;//ListView組件//默認(rèn)布局管理器List<ActivityManager.RunningTaskInfo>
allTaskInfo;//所有任務(wù)信息@Overridepublic
void
onCreate(Bundle
savedInstanceState)
{super.onCreate(savedInstanceState);super.setContentView(R.layout.main);this.tasklist
=(ListView)super.findViewById(R.id.tasklist);//取得組件this.activityManager
=
(ActivityManager)
super.getSystemService(Context.ACTIVITY_SERVICE);//取得運(yùn)行的服務(wù)this.listActivity();}public
void
listActivity()
{this.allTaskInfo
=this.activityManager.getRunningTasks(30);//取回30筆任務(wù)數(shù)量Iterator<ActivityManager.RunningTaskInfo>
iterInfo=allTaskInfo.iterator();//實(shí)例化Iterator對象//迭代輸出//取出每一個(gè)對象while
(iterInfo.hasNext())
{ActivityManager.RunningTaskInfo
task
=
iterInfo.next();this.all.add("【ID="+task.id+"】"+
task.baseActivity.getClassName());//追加數(shù)據(jù)}this.adapter
=new
ArrayAdapter<String>(this,
//實(shí)例化ArrayAdapter//定義布局文件android.R.layout.simple_list_item_1,MyActivityRunDemo.this.all);//定義顯示數(shù)據(jù)this.tasklist.setAdapter(MyActivityRunDemo.this.adapter);//設(shè)置數(shù)據(jù)}}范例:取得正在運(yùn)行的服務(wù)ActivityManager.RunningServiceInfo類的常用屬性No.屬性類型描述1public
long
activeSince屬性服務(wù)從啟動(dòng)到現(xiàn)在所運(yùn)行的時(shí)間2public
int
clientCount屬性返回連接到此服務(wù)的客戶端數(shù)量3public
int
crashCount屬性返回該服務(wù)在運(yùn)行中的死機(jī)次數(shù)4public
boolean
foreground屬性如果為true則表示服務(wù)在 運(yùn)行5public
long
lastActivityTime屬性最后一個(gè)Activity與服務(wù)的綁定時(shí)間6public
int
pid屬性服務(wù)的ID,如果不是0則表示正在運(yùn)行7public
String
process屬性取得服務(wù)的名稱8public
long
restarting屬性如果不為0,則表示不是運(yùn)行中的服務(wù),預(yù)計(jì)會在指定的時(shí)間內(nèi)啟動(dòng)9public
ComponentName
service屬性取得服務(wù)的組件對象10public
boolean
started屬性若服務(wù)正在運(yùn)行則此值為true11public
int
uid屬性此服務(wù)的UID定義Activity程序,顯示所有的服務(wù)public
class
MyActivityRunDemo
extends
Activity
{private
ActivityManager
activityManager
=null;
//ActivityManager對象istAdapter
adapter
=
null;//適配器組件privaprivaprivaist<String>all
=new
ArrayList<String>();//保存信息istView
tasklist
=
null;//ListView組件//所有任務(wù)信息List<ActivityManager.RunningServiceInfo>
allServices;@Overridepublic
void
onCreate(Bundle
savedInstanceState){super.onCreate(savedInstanceState);super.setContentView(R.layout.main);//默認(rèn)布局管理器//取得運(yùn)行的服務(wù)this.tasklist
=(ListView)super.findViewById(R.id.tasklist);//取得組件this.activityManager
=
(ActivityManager)
super.getSystemService(Context.ACTIVITY_SERVICE);this.listActivity();}public
void
listActivity()
{this.allServices
=this.activityManager.getRunningServices(30);//30筆任務(wù)數(shù)量Iterator<ActivityManager.RunningServiceInfo>
iterInfo
=
allServices.iterator();//實(shí)例化Iterator對象while
(iterInfo.hasNext()){
//迭代輸出ActivityManager.RunningServiceInfo
service
=
iterInfo.next();this.all.add("【ID="+service.pid
+"】"+cess);//每一個(gè)對象//追加數(shù)據(jù)}this.adapter
=new
ArrayAdapter<String>(this,
//實(shí)例化ArrayAdapterandroid.R.layout.simple_list_item_1,MyActivityRunDemo.this.all);//定義布局文件//定義顯示數(shù)據(jù)this.tasklist.setAdapter(MyActivityRunDemo.this.adapter);//設(shè)置數(shù)據(jù)}}范例:取得全部運(yùn)行的進(jìn)程ActivityManager.RunningAppProcessInfo類的常用屬性No.屬性類型描述1public
int
importance屬性取得進(jìn)程的重要性代碼2public
int
importanceReasonCode屬性取得進(jìn)程的重要性原因代碼3public
ComponentName
i
ponent屬性取得進(jìn)程重要性原因的客戶端組件4public
int
importanceReasonPid屬性取得進(jìn)程重要性原因的客戶端進(jìn)程ID,如果是0則表示沒有客戶端使用此進(jìn)程5public
int
pid屬性取得進(jìn)程的PID6public
String[]
pkgList屬性取得所有已經(jīng)加載到進(jìn)程的程序包7public
String
processName屬性取得進(jìn)程的名稱8public
static
final
int
IMPORTANCE_BACKGROUND常量進(jìn)程重要性代碼:表示在 運(yùn)行9public
static
final
int
IMPORTANCE_EMPTY常量進(jìn)程重要性代碼:沒有程序執(zhí)行此進(jìn)程10public
static
final
int
IMPORTANCE_FOREGROUND常量進(jìn)程重要性代碼:此進(jìn)程運(yùn)行
臺UI11public
static
final
int
IMPORTANCE_PERCEPTIBLE常量進(jìn)程重要性代碼:此進(jìn)程正在運(yùn)行12public
static
final
int
IMPORTANCE_SERVICE常量進(jìn)程重要性代碼:此進(jìn)程是繼續(xù)保持運(yùn)行的服務(wù)13public
static
final
int
IMPORTANCE_VISIBLE常量進(jìn)程重要性代碼:這個(gè)線程還沒有運(yùn)行 臺,但是正準(zhǔn)備 臺運(yùn)行定義Activity程序,取得所有的進(jìn)程信息public
class
MyActivityRunDemo
extends
Activity
{private
ActivityManager
activityManager
=null;
//ActivityManager對象istAdapter
adapter
=
null;//適配器組件privaprivaprivaist<String>all
=new
ArrayList<String>();//保存信息istView
tasklist
=
null;//ListView組件//默認(rèn)布局管理器List<ActivityManager.RunningAppProcessInfo>
allApp;//所有任務(wù)信息@Overridepublic
void
onCreate(Bundle
savedInstanceState){super.onCreate(savedInstanceState);super.setContentView(R.layout.main);this.tasklist
=(ListView)super.findViewById(R.id.tasklist);//取得組件this.activityManager
=
(ActivityManager)
super.getSystemService(Context.ACTIVITY_SERVICE);//取得運(yùn)行的服務(wù)this.listActivity();}public
void
listActivity()
{this.allApp
=this.activityManager.getRunningAppProcesses();//取回任務(wù)Iterator<ActivityManager.RunningAppProcessInfo>
iterInfo
=
allApp.iterator();//實(shí)例化Iterator對象while
(iterInfo.hasNext())
{//迭代輸出ActivityManager.RunningAppProcessInfo
app=iterInfo.next();//每一個(gè)對象this.all.add("【ID=
"
+
app.pid
+"
】
"
+
cessName);
//
追加數(shù)據(jù)}this.adapter
=new
ArrayAdapter<String>(this,
//實(shí)例化ArrayAdapterandroid.R.layout.simple_list_item_1,MyActivityRunDemo.this.all);//定義布局文件//定義顯示數(shù)據(jù)this.tasklist.setAdapter(MyActivityRunDemo.this.adapter);//設(shè)置數(shù)據(jù)}}范例:取得網(wǎng)絡(luò)信息ephonyManager的常用常量及方法No.常量及方法類型描述1public
static
final
int
NETWORK_TYPE_CDMA常量使用CDMA網(wǎng)絡(luò)2public
static
final
int
NETWORK_TYPE_GPRS常量使用GPRS網(wǎng)絡(luò)3public
static
final
int
PHONE_TYPE_CDMA常量使用CDMA通訊4public
static
final
int
PHONE_TYPE_GSM常量使用GSM通訊5public
String
getLine1Number()普通取得
號碼6public
String
getNetworkOperatorName()普通取得移動(dòng)提供商的名稱7public
int
getNetworkType()普通取得移動(dòng)網(wǎng)絡(luò)的連接類型8public
intgetPhoneType()普通取得
網(wǎng)絡(luò)類型9public
boolean
isNetworkRoaming()普通判斷 是否處于漫游狀態(tài)10public
void
listen(PhoneSta istener
listener,
int
events)普通狀態(tài)
器范例:定義布局管理器——main.xml→
線性布局管理器/apk/res/android"→→→→<?xml
version="1.0"
encoding="utf-8"?><LinearLayoutxmlns:android="http://sandroid:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><ListViewandroid:id="@+id/infolist"android:layout_width="fill_parent"android:layout_height="wrap_content"
/>
→所有組件垂直擺放布局管理器寬度為屏幕寬度→
布局管理器高度為屏幕高度ListView組件組件ID,程序中使用→
組件寬度為屏幕寬度組件高度為自身內(nèi)容高度</LinearLayout>定義Activity程序,顯示網(wǎng)絡(luò)信息(A)public
class
MyephoneManagerDemo
extends
Activity
{istView
infolist
=
null;//ListView列表ephonyManager
manager
=
null;//
管理器istAdapter
adapter
=null;
//適配器組件privaprivateprivaprivaist<String>
all
=new
ArrayList<String>();//保存信息@Overridepublic
void
onCreate(Bundle
savedInstanceState)
{super.onCreate(savedInstanceState);super.setContentView(R.layout.main);list
=
(ListView)
super.findViewById(R.list);//調(diào)用布局管理器//取得組件this.manager
=
( ephonyManager)
super.getSystemService(Context.
EPHONY_SERVICE);//取得服務(wù)this.list();//列表顯示}定義Activity程序,顯示網(wǎng)絡(luò)信息(B)private
void
list(){
//執(zhí)行列表顯示操作號碼"
:
"
號碼:"http://取得 號碼this.all.add(this.manager.getLine1Number()==null
?"沒有+
this.manager.getLine1Number());this.all.add(this.manager.getNetworkOperatorName()
==
null
?"沒有移動(dòng)服務(wù)商":"移動(dòng)服務(wù)商:"+this.manager.getNetworkOperatorName());//取得移動(dòng)商名稱if
(this.manager.getPhoneType()== ephonyManager.NETWORK_TYPE_CDMA){//判斷網(wǎng)絡(luò)類型this.all.add("移動(dòng)網(wǎng)絡(luò):CDMA");ephonyManager.NETWORK_TYPE_GPRS)
{}
else
if
(this.manager.getPhoneType()
==this.all.add("移動(dòng)網(wǎng)絡(luò):GPRS");}
else{this.all.
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【優(yōu)化方案】2020-2021學(xué)年高一物理(人教版必修2)第七章第三節(jié)課時(shí)作業(yè)-含答案
- 2024年05月浙江浙商銀行杭州分行暑期實(shí)習(xí)生招考筆試歷年參考題庫附帶答案詳解
- 2021高考英語一輪課下限時(shí)訓(xùn)練及答案(人教新課標(biāo)必修2Unit-5)
- 2025年度土地承包經(jīng)營權(quán)流轉(zhuǎn)登記備案合同范本3篇
- 2025年度心理咨詢合同范本全面升級版2篇
- 維修管理制度范本
- 2024年田徑器材采購合同3篇
- 永輝超市數(shù)字化轉(zhuǎn)型財(cái)務(wù)績效分析
- 2025年度模特肖像權(quán)授權(quán)合同樣本2篇
- 公路養(yǎng)護(hù)技術(shù)規(guī)范六篇
- 2023-2024學(xué)年浙江省寧波市余姚市九年級(上)期末英語試卷
- 《金融風(fēng)險(xiǎn)管理》期末復(fù)習(xí)試題及答案
- DZ/T 0462.4-2023 礦產(chǎn)資源“三率”指標(biāo)要求 第4部分:銅等12種有色金屬礦產(chǎn)(正式版)
- 熱帶園林樹木學(xué)智慧樹知到期末考試答案章節(jié)答案2024年海南大學(xué)
- 《無機(jī)及分析化學(xué)》期末考試試卷附答案
- 2024年藥品集中采購合同范本(二篇)
- 微生物學(xué)(魯東大學(xué))智慧樹知到期末考試答案章節(jié)答案2024年魯東大學(xué)
- 玻璃制造過程綠色節(jié)能技術(shù)創(chuàng)新
- 廣東省深圳市龍華區(qū)2023-2024學(xué)年中考適應(yīng)性考試物理試題含解析
- MOOC 國際私法-暨南大學(xué) 中國大學(xué)慕課答案
- 部隊(duì)行車安全教育
評論
0/150
提交評論