- 浏览: 664320 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (252)
- Html/Div+CSS (12)
- Js/Jquery (34)
- Flex (2)
- Ajax (3)
- Java (35)
- C# (15)
- Spring (16)
- Hibernate (13)
- Struts2 (12)
- Struts1 (7)
- DWR (1)
- iBatis/myBatis (9)
- Tag(JSTL、EL) (1)
- Android (44)
- SQL (7)
- SEO (7)
- Exception (3)
- Tool (10)
- Other (3)
- WebService (9)
- Apache (7)
- Ext (0)
- Utils (12)
- thinking in programme (2)
- Hadoop (0)
- ActiveMQ (0)
- HTML5/CSS3 (0)
- WPF (1)
- NodeJs (1)
- 设计模式 (0)
- 程序人生 (1)
- 随笔 (1)
- Linux (1)
- Load Balance (0)
最新评论
-
drinkjava2:
太复杂了而且不通用,利用ThreadLocal可完美解决这一问 ...
JDBC的多条件动态查询 -
u013107014:
multipartRequest.getFiles(" ...
多文件上传 by MultipartFile and Multiple -
liyys:
可惜没讲你mysql数据库的表的设计
iBatis入门 -
Mapple_leave:
效果还是挺不错的,谢谢了。
中文简体与繁体的转换 -
arcpad:
JS禁用浏览器退格键
Service 基本组成:
在 Android 系统开发中, Service 是一个重要的组成部分,如果某些程序是不希望用户看见的,那么可以将这些程序定义在 Service 中,这样就可以完成程序的后台运行(也可以在不现实界面的形式下运行 ),即 Service 实际上相当于是一个没有图形界面的 Activity 程序,而且当用户要执行某些操作需要进行跨进程访问时,也可以用 Service 来完成。
Service 是一个没有 UI 界面的操作组件,主要功能是为 Activity 程序提供一些必要的支持,如手机中的 Mp3 播放软件等,当回到主界时这些组件依然可以运行,这些就属于 Service 的功能,在开发时,用户只需要继承 android.app.Service 类就可以完成 Service 程序的开发。
Service 的生命周期控制方法及常量:
No. |
方法及常量 |
类型 |
描述 |
1 |
Public static final int START_CONTINUATION_MASK |
常量 |
继续执行 Service |
2 |
Publis static final int START_STICKY |
常量 |
用于显示地启动和停止 Service |
3 |
Public abstract IBinder onBind(Intent intent) |
普通 |
设置 Activity 和 Service 之间的绑定 |
4 |
Public void onCreate() |
普通 |
当一个 Service 创建时笤俑 |
5 |
Public int onStartCommand(Intent intent,int flags, int startId) |
普通 |
启动 Service ,由 startService() 方法触发,替代了以前的 onStart() 方法 |
6 |
Public void onDestroy() |
普通 |
Service 销毁时调用,由 stopService() 方法触发 |
Activity 操作 Service 的方法
No. |
方法 |
描述 |
1 |
Public ComponentName startService(Intent service) |
启动一个 Service |
2 |
Public Boolean stopService(Intent name) |
停止一个 Service |
3 |
Public Boolean bindService(Intent service, ServiceConnection conn,int flags) |
与一个 Service 绑定 |
4 |
Public void unbindService(ServiceConnection conn) |
取消与一个 Service 的绑定 |
范例:
定义用户的 Service 组件: MyServiceUtil.java
package com.iflytek.demo; import android.app.Service; import android.content.Intent; import android.os.IBinder; public class MyServiceUtil extends Service { @Override public IBinder onBind(Intent intent) {// 绑定Activity return null; // 此处暂时不做任何的处理 } @Override public void onCreate() {// 创建时调用 System.out.println("*** Service onCreate()"); } @Override public void onDestroy() {// 销毁时调用 System.out.println("*** Service onDestroy()"); } @Override public int onStartCommand(Intent intent, int flags, int startId) {// 开始Service System.out.println("*** Service onStartCommand"); return Service.START_CONTINUATION_MASK; // 继续执行Service } }
与Activity最大的区别在于此处只是提供了一些后台的操作。
Service01Activity.java
package com.iflytek.demo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class Service01Activity extends Activity { private Button start; private Button stop; /** Called when the activity is first created. */ @Override public 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.start.setOnClickListener(new StartOnClickListenerImpl()); this.stop.setOnClickListener(new StopOnClickListenerImpl()); } private class StartOnClickListenerImpl implements OnClickListener { @Override public void onClick(View v) { Service01Activity.this.startService(new Intent( Service01Activity.this, MyServiceUtil.class)); } } private class StopOnClickListenerImpl implements OnClickListener { @Override public void onClick(View v) { Service01Activity.this.stopService(new Intent( Service01Activity.this, MyServiceUtil.class)); } } }
在AndroidManifest.xml中添加:
<service android:name=".MyServiceUtil" />
运行结果:
点击“启动Service”按钮: 10-28 20:40:18.225: I/System.out(7081): *** Service onCreate() 10-28 20:40:18.230: I/System.out(7081): *** Service onStartCommand 重复点击“启动Service”按钮: 10-28 20:42:10.875: I/System.out(7331): *** Service onStartCommand 单击“结束Service”按钮: 10-28 20:42:52.860: I/System.out(7353): *** Service onDestroy()
绑定 Service:
当一个 Service 程序启动之后,如果没有出现意外且调用 stopService() 方法,则将会一直留在手机的服务之中,如果希望由 Activity 启动的 Service 程序可以在 Activity 程序结束后自动结束,则可以将 Activity 和 Service 程序进行绑定。
ServiceConnection 接口定义方法
No. |
方法 |
描述 |
1 |
Public abstract void onServiceConnected(ComponentName name ,IBinder service) |
当与一个 Service 建立连接时调用 |
2 |
Public abstract void onServiceDisconnected(ComponentName name) |
当与一个 Service 取消连接时调用 |
所以我们可以发现 Service 与 ServiceConnection 的联系,默认情况下,当一个 Activity 程序启动 Service 之后,该 Service 程序是在后台独自运行的,与前台的 Activity 就没有关系了,而使用 ServiceConnection 就表示该 Service 永远要和这个 Activity 程序绑定在一期,不再是独立运行了。
MyServiceUtil.java
package com.iflytek.demo; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; public class MyServiceUtil extends Service { private IBinder myBinder = new Binder() { @Override public String getInterfaceDescriptor() {// 取得接口描述信息 return "MyServiceUitl Class ..";// 返回Service类的名称 } }; @Override public IBinder onBind(Intent intent) {// 绑定时触发 System.out.println("*** Service onBind()"); return this.myBinder; // 此处暂时不做任何的处理 } @Override public void onRebind(Intent intent) {// 重新绑定时触发 System.out.println("*** Service onRebind()"); super.onRebind(intent); } @Override public boolean onUnbind(Intent intent) {// 接触绑定时触发 System.out.println("*** Service onUnbind()"); return super.onUnbind(intent); } @Override public void onCreate() {// 创建时触发 System.out.println("*** Service onCreate()"); } @Override public void onDestroy() {// 销毁时触发 System.out.println("*** Service onDestroy()"); } @Override public int onStartCommand(Intent intent, int flags, int startId) {// 启动时触发 System.out.println("*** Service onStartCommand"); return Service.START_CONTINUATION_MASK; // 继续执行 } }
Service02_Activity.java
package com.iflytek.demo; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class Service02_Activity extends Activity { private Button start; private Button stop; private Button bind; private Button unbind; private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) {// 连接到Service try { System.out.println("### Service Connect Success . service = " + service.getInterfaceDescriptor()); } catch (RemoteException e) { } } @Override public void onServiceDisconnected(ComponentName name) {// 与Service断开连接 System.out.println("### Service Connect Failure."); }// 接受服务状态 }; /** Called when the activity is first created. */ @Override public 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 { @Override public void onClick(View v) { Service02_Activity.this.startService(new Intent(// 启动Service Service02_Activity.this, MyServiceUtil.class)); } } private class StopOnClickListenerImpl implements OnClickListener { @Override public void onClick(View v) { Service02_Activity.this.stopService(new Intent(// 停止Service Service02_Activity.this, MyServiceUtil.class)); } } private class BindOnClickListenerImpl implements OnClickListener { @Override public void onClick(View v) {// 绑定Service Service02_Activity.this.bindService(new Intent( Service02_Activity.this, MyServiceUtil.class), Service02_Activity.this.serviceConnection, Context.BIND_AUTO_CREATE); } } private class UnbindOnClickListenerImpl implements OnClickListener { @Override public void onClick(View v) {// 取消Service Service02_Activity.this .unbindService(Service02_Activity.this.serviceConnection); } } }
运行结果:
(1) 单击“启动Service”按钮: 10-28 21:42:10.950: I/System.out(8093): *** Service onCreate() 10-28 21:42:10.950: I/System.out(8093): *** Service onStartCommand (2) 单击“绑定Service”按钮: 10-28 21:43:55.620: I/System.out(8237): *** Service onBind() 10-28 21:43:55.640: I/System.out(8237): ### Service Connect Success . service = MyServiceUitl Class .. (3) 取消1,2,直接单击“绑定Service”按钮: 10-28 21:48:31.200: I/System.out(8638): *** Service onCreate() 10-28 21:48:31.205: I/System.out(8638): *** Service onBind() 10-28 21:48:31.225: I/System.out(8638): ### Service Connect Success . service = MyServiceUitl Class .. (4) 不单击“停止”,直接退出Activity程序 10-28 21:50:06.565: I/System.out(8708): *** Service onUnbind() 当服务启动后,实际上就在手机系统的后台了,因为Activity程序被关闭后,与Service连接的Activity就消失了,所以此处要解除与Activity程序的绑定,但服务不会销毁。 (5) 返回Activity程序,单击 “绑定Service”按钮: 10-28 21:51:31.225: I/System.out(8638): ### Service Connect Success . service = MyServiceUitl Class .. 当用户再次回到Activity程序之后,则可以重新取得一个Activity与Service之间绑定的ServiceConnect接口对象 (6) 单击“解除绑定Service”按钮: 10-28 21:52:06.565: I/System.out(8708): *** Service onUnbind() (7) 单击“停止Service”按钮: 10-28 21:52:06.570: I/System.out(8708): *** Service onDestroy()
如果没有服务与Activity进行绑定而又调用了解除绑定操作,则会出现错误,所以,在解除绑定之前必须要增加一个判断,判断一个Activity是否和一个Service绑定在一期,如果绑定在一起,才可以使用unbindService()方法解除绑定。
但是遗憾的是,在Android中并没有提供这样的一个判断方法,所以一般的做法是定义一个标记性的操作接口,而后台Activity中判断此接口对象是否为null来决定是否绑定了Service。
定义一个标记性接口IService.java
package com.iflytek.demo; /** * * @author xdwang * * @create 2012-10-28 下午10:02:23 * * @email:xdwangiflytek@gmail.com * * @description 标记性接口 * */ public interface IService { }
定义服务类MyServiceUtil.java
package com.iflytek.demo; import 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(); @Override public IBinder onBind(Intent intent) { System.out.println("*** Service onBind()"); return this.myBinder; // 此处暂时不做任何的处理 } class BinderImpl extends Binder implements IService {//这里多实现一个接口 @Override public String getInterfaceDescriptor() { return "MyServiceUitl Class .."; } } }
BinderImpl多实现了一个IService接口,这样以后就可以通过ServiceConnection中的onServiceConnected()方法取得此IService子类对象
Service03_Activity.java
package com.iflytek.demo; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import com.iflytek.demo.MyServiceUtil.BinderImpl; public class Service03_Activity extends Activity { private Button bind; private Button unbind; private IService service = null; private ServiceConnection serviceConnection = new ServiceConnectionImpl(); private class ServiceConnectionImpl implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { Service03_Activity.this.service = (BinderImpl) service; // BinderImpl是IBinder接口的子类,所以将IBinder向下转型为BinderImpl类 // 而后通过此类对象为Service接口实例化 } @Override public void onServiceDisconnected(ComponentName name) { } } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.main); this.bind = (Button) super.findViewById(R.id.bind); this.unbind = (Button) super.findViewById(R.id.unbind); this.bind.setOnClickListener(new BindOnClickListenerImpl()); this.unbind.setOnClickListener(new UnbindOnClickListenerImpl()); } private class BindOnClickListenerImpl implements OnClickListener { @Override public void onClick(View v) { Service03_Activity.this.bindService(new Intent( Service03_Activity.this, MyServiceUtil.class), Service03_Activity.this.serviceConnection, Context.BIND_AUTO_CREATE); } } private class UnbindOnClickListenerImpl implements OnClickListener { @Override public void onClick(View v) { if (Service03_Activity.this.service != null) { Service03_Activity.this .unbindService(Service03_Activity.this.serviceConnection); Service03_Activity.this.service = null; } } } }
操作系统服务:
在 Android 系统中也提供了一些系统服务,为了方便操作这些系统服务,在 android.content.Context 类中将所有的系统服务名称以常量的形式进行了绑定,用户使用时直接利用 getSystemService() 方法指定好服务的名称就可以取得。 Context 类中定义的系统服务:
No. |
常量 |
描述 |
1 |
public static final String CLIPBOARD_SERVICE |
剪贴板服务 |
2 |
public static final String WINDOW_SERVICE |
窗口服务 |
3 |
public static final String ALARM_SERVICE |
闹铃服务 |
4 |
public static final String AUDIO_SERVICE |
音频服务 |
5 |
public static final String NOTIFICATION_SERVICE |
Notification 服务 |
6 |
public static final String SEARCH_SERVICE |
搜索服务 |
7 |
public static final String POWER_SERVICE |
电源管理服务 |
8 |
public static final String WIFI_SERVICE |
WiFi 服务 |
9 |
public static final String ACTIVITY_SERVICE |
运行程序服务 |
具体可以查询相关 Android 文档。
一、 系统剪贴板服务
Service04_Activity.java
package com.iflytek.demo; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.text.ClipboardManager; public class Service04_Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.main); ClipboardManager clipboardManager = (ClipboardManager) super .getSystemService(Context.CLIPBOARD_SERVICE); // 取得剪贴板服务 clipboardManager.setText("XDWANG");//设置剪贴板中的内容 } }
一、 取得正在进行的进程信息
在 Android 系统中可以通过 super.getSystemService() 方法取得 android.app.ActivityManager ,此类的常用方法有:
No. |
方法 |
描述 |
1 |
Public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses() |
取得所有正在运行的进程信息 |
2 |
Public List<ActivityManager.RunningServiceInfo> getRunningServices(int maxNum) |
取得指定个数的服务信息 |
3 |
Public List<ActivityManager.RunningTaskInfo> getRunningTasks(int maxNum) |
取得指定个数的任务信息 |
4 |
Public void killBackgroundProcesses(String packageName) |
销毁一个后台进程,必须设置 KILL_BACKGROUND_PROCESSES 权限 |
5 |
Public ConfigurationInfo getDeviceConfigurationInfo() |
取得设备的配置信息 |
1 、取得正在运行的 Activity 程序: ActivityManager.RunningTaskInfo
No. |
属性 |
描述 |
1 |
Public ComponentName baseActivity |
取得程序运行开始的 Activity |
2 |
Public CharSequence description |
取得该 Activity 的描述信息 |
3 |
Public int id |
取得任务的唯一 ID |
4 |
Public int numActivities |
取得所有运行的 Activity 数量,包括已停止的 |
5 |
Public int numRunning |
取得所有运行的 Activity 数量,不含已停止的 |
6 |
Public Bitmap thumbnail |
取得任务的图标 |
7 |
Public Component topActivity |
取得当前用户正在操作的 Activity 信息 |
Service05_Activity.java
package com.iflytek.demo; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import android.app.Activity; import android.app.ActivityManager; import android.content.Context; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; public class Service05_Activity extends Activity { private ListView tasklist = null; private ListAdapter adapter = null; private List<String> all = new ArrayList<String>(); private ActivityManager activityManager = null; private List<ActivityManager.RunningTaskInfo> allTaskInfo; /** Called when the activity is first created. */ @Override public 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); this.listActivity(); } private void listActivity() { this.allTaskInfo = this.activityManager.getRunningTasks(30); // 返回30条 Iterator<ActivityManager.RunningTaskInfo> iterInfo = this.allTaskInfo .iterator(); while (iterInfo.hasNext()) { ActivityManager.RunningTaskInfo task = iterInfo.next(); this.all.add("【ID = " + task.id + " 】 " + task.baseActivity.getClassName()); } this.adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, this.all); this.tasklist.setAdapter(this.adapter); } }
添加权限:
<uses-permission android:name="android.permission.GET_TASKS" />
2 、取得后台运行的服务信息: ActivityManager.RunningServiceInfo
No. |
属性 |
描述 |
1 |
Public long activeSince |
服务从启动到现在所运行的时间 |
2 |
Public int clientCount |
返回连接到此服务的客户端数量 |
3 |
Public int crashCount |
返回该服务在运行中的死机次数 |
4 |
Public Boolean foreground |
如果为 true 则表示服务在后台运行 |
5 |
Pulibc long lashActivityTime |
最后一个 Activity 与服务的绑定时间 |
6 |
Public int pid |
服务的 ID ,如果不是 0 则表示正在运行 |
7 |
Public String process |
取得服务的名称 |
8 |
Public long restarting |
如果不为 0 ,则表示不是运行中的服务,预计会在指定的时间内启动 |
9 |
Public ComponentName service |
取得服务的组件对象 |
10 |
Public Boolean started |
若服务正在运行则此值为 true |
11 |
Public int uid |
此服务的 UID |
Service06_Activity.java
package com.iflytek.demo; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import android.app.Activity; import android.app.ActivityManager; import android.content.Context; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; public class Service06_Activity extends Activity { private ListView tasklist = null; private ListAdapter adapter = null; private List<String> all = new ArrayList<String>(); private ActivityManager activityManager = null; private List<ActivityManager.RunningServiceInfo> allTaskInfo; /** Called when the activity is first created. */ @Override public 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); this.listActivity(); } private void listActivity() { this.allTaskInfo = this.activityManager.getRunningServices(30); Iterator<ActivityManager.RunningServiceInfo> iterInfo = this.allTaskInfo .iterator(); while (iterInfo.hasNext()) { ActivityManager.RunningServiceInfo service = iterInfo.next(); this.all.add("【ID = " + service.pid + " 】 " + service.process); } this.adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, this.all); this.tasklist.setAdapter(this.adapter); } }
3 、取得所有的正在运行进程信息: ActivityManager.RunningAppProcessInfo
No. |
属性 |
描述 |
1 |
Public int importance |
取得进程的重要性代码 |
2 |
Public int importanceReasonCode |
取得进程的重要性原因代码 |
3 |
Public ComponentName importanceReasonComponent |
取得进程重要性原因的客户端组件 |
4 |
Public int importanceReasonPid |
取得进程重要性原因的客户端进程 ID ,如果是 0 则表示没有客户端使用此进程 |
5 |
Public int pid |
取得进程的 PID |
6 |
Public String[] pkgList |
取得所有已经加载到进程的程序包 |
7 |
Public String processName |
取得进程的名称 |
8 |
Public static final int IMPORTANCE_BACKGROUND |
进程重要性代码:表示在后台运行 |
9 |
Public static final int IMPORTANCE_EMPTY |
进程重要性代码:没有程序执行此进程 |
10 |
Public static final int IMPORTANCE_FOREGROUND |
进程重要性代码:此进程运行在前台 UI |
11 |
Public static final int IMPORTANCE_PERCEPTIBLE |
进程重要性代码:此进程正在运行 |
12 |
Public static final int IMPORTANCE_SERVICE |
进程重要性代码:此进程是继承保持运行的服务 |
13 |
Public static final int IMPORTANCE_VISIBLE |
进程重要性代码:该线程还没有运行在前台,但是正准备在前台运行 |
Service07_Activity.java
package com.iflytek.demo; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import android.app.Activity; import android.app.ActivityManager; import android.content.Context; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; public class Service07_Activity extends Activity { private ListView tasklist = null; private ListAdapter adapter = null; private List<String> all = new ArrayList<String>(); private ActivityManager activityManager = null; private List<ActivityManager.RunningAppProcessInfo> allTaskInfo; /** Called when the activity is first created. */ @Override public 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); this.listActivity(); } private void listActivity() { this.allTaskInfo = this.activityManager.getRunningAppProcesses(); Iterator<ActivityManager.RunningAppProcessInfo> iterInfo = this.allTaskInfo .iterator(); while (iterInfo.hasNext()) { ActivityManager.RunningAppProcessInfo app = iterInfo.next(); this.all.add("【ID = " + app.pid + " 】 " + app.processName); } this.adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, this.all); this.tasklist.setAdapter(this.adapter); } }
三、 取得手机网络信息
在 Android 中,用户可以直接使用 getSystemService() 方法通过 Context.TELEPHONY_SERVICE 取得手机网络的相关信息, android.telephony.TelephonyManager
No. |
常量及方法 |
描述 |
1 |
Public static final int NETWORK_TYPE_CDMA |
使用 CDMA 网络 |
2 |
Public static final int NETWORK_TYPE_GPRS |
使用 GPRS 网络 |
3 |
Public static final int PHONE_TYPE_CDMA |
使用 CDMA 通信 |
4 |
Public static final int PHONE_TYPE_CDMA |
使用 GPRS 同学 |
5 |
Public String getLine1Number |
取得手机号码 |
6 |
Public String getNetworkOperatorName() |
取得移动提供商的名称 |
7 |
Public int getNetworkType() |
取得移动网络的连接类型 |
8 |
Public int getPhoneType() |
取得电话网络类型 |
9 |
Public Boolean isNetworkRoaming() |
判断电话是否处于漫游状态 |
10 |
Public void listen(OhoneStateListener listener,int events) |
注册电话状态监听器 |
Service08_Activity.java
package com.iflytek.demo; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.telephony.TelephonyManager; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; public class Service08_Activity extends Activity { private ListView infolist = null; private ListAdapter adapter = null; private List<String> all = new ArrayList<String>(); private TelephonyManager manager = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.main); this.infolist = (ListView) super.findViewById(R.id.infolist); this.manager = (TelephonyManager) super .getSystemService(Context.TELEPHONY_SERVICE); // 电话服务 this.list(); } private void list() { // 列出一些信息 this.all.add(this.manager.getLine1Number() == null ? "没有手机号码" : "手机号码:" + this.manager.getLine1Number()); this.all.add(this.manager.getNetworkOperatorName() == null ? "没有移动服务商" : "移动服务商:" + this.manager.getNetworkOperatorName()); if (this.manager.getPhoneType() == TelephonyManager.NETWORK_TYPE_CDMA) { this.all.add("移动网络:CDMA"); } else if (this.manager.getPhoneType() == TelephonyManager.NETWORK_TYPE_GPRS) { this.all.add("移动网络:GPRS"); } else { this.all.add("移动网络:未知"); } if (this.manager.getNetworkType() == TelephonyManager.PHONE_TYPE_GSM) { this.all.add("网络类型:GSM"); } else if (this.manager.getNetworkType() == TelephonyManager.PHONE_TYPE_CDMA) { this.all.add("网络类型:CDMA"); } else { this.all.add("网络类型:未知"); } this.all.add("是否漫游:" + (this.manager.isNetworkRoaming() ? "漫游" : "非漫游")); this.adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, this.all); this.infolist.setAdapter(this.adapter); } }
添加权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" > </uses-permission>
四、 取得 WiFi 操作
在 Android 中,用户可以直接使用 getSystemService() 方法通过 Context.WIFI_SERVICE 取得手机网络的相关信息, android.net.wifi.WifiManager
No. |
常量及方法 |
描述 |
1 |
Public static final int WIFI_STATE_DISABLED |
已关闭 WiFi 连接,数值为 1 |
2 |
Public static final int WIFI_STATE_DISABLING |
正在关闭 WiFi 连接,数值为 0 |
3 |
Public static final int WIFI_STATE_ENABLED |
已启用 WiFi 连接,数值为 3 |
4 |
Public static final int WIFI_STATE_ENABLING |
正在启用 WiFi 连接,数值为 2 |
5 |
Public static final int WIFI_STATE_UNKNOWN |
未知的 WiFi 状态,数值为 4 |
6 |
Public boolean setWifiEnabled(Boolean enabled) |
设置 WiFi 是否启用, true 为启用, false 为关闭 |
7 |
Public Boolean isWifiEnabled |
返回启用状态 |
8 |
Public Boolean reconnect() |
重新连接接入点网络 |
9 |
Public Boolean disconnect() |
断开当前接入点 |
10 |
Public int getWifiState() |
返回 WiFi 状态,返回数值为表中的 5 个常量 |
Service09_Activity.java
package com.iflytek.demo; import android.app.Activity; import android.content.Context; import android.net.wifi.WifiManager; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class Service09_Activity extends Activity { private Button open = null; private Button close = null; private Button check = null; private TextView msg = null; private WifiManager wifiManager = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.main); this.open = (Button) super.findViewById(R.id.open); this.close = (Button) super.findViewById(R.id.close); this.check = (Button) super.findViewById(R.id.check); this.msg = (TextView) super.findViewById(R.id.msg); this.wifiManager = (WifiManager) super .getSystemService(Context.WIFI_SERVICE); this.open.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Service09_Activity.this.wifiManager.setWifiEnabled(true); // 启用wifi Service09_Activity.this.msg.setText("打开WIFI,状态:" + Service09_Activity.this.wifiManager.getWifiState()); } }); this.close.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Service09_Activity.this.wifiManager.setWifiEnabled(false); // 启用wifi Service09_Activity.this.msg.setText("打开WIFI,状态:" + Service09_Activity.this.wifiManager.getWifiState()); } }); this.check.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Service09_Activity.this.msg.setText("检查WIFI,状态:" + Service09_Activity.this.wifiManager.getWifiState()); } }); } }
添加权限:
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
发表评论
-
This version of ADT requires android SDK
2013-07-25 16:45 1544Windows系统下用Eclipse开发工具开发An ... -
Android学习13-----网络通信(4) WebView组件
2012-11-27 09:18 2456WebView 是一个开发的浏览 ... -
Android学习13-----网络通信(3) 与Web Service进行通讯
2012-11-26 09:40 1862这里我们的WebService使用xFire开发。 ... -
Android学习13-----网络通信(2) 与Socket交换数据
2012-11-23 09:11 3272对于网络开发而言,最常用的交互模式:WebService、We ... -
Android学习13-----网络通信(1) 与WEB服务器交换数据
2012-11-22 09:11 2160与Web服务器交互: 如果手机要想与 web ... -
Android学习11-----多媒体技术(5) 媒体录制
2012-11-16 08:10 1851在Android中通过android.media ... -
Android学习11-----多媒体技术(4) 使用摄像头拍照,多点触控
2012-11-15 08:37 2838一、摄像头拍照 前面说媒体播放 时了解了 ... -
Android学习11-----多媒体技术(3) 媒体播放
2012-11-14 08:25 1384在 Androi ... -
Android学习11-----多媒体技术(2) Animation
2012-11-13 08:47 1960一、渐变动画, Tweened Animation ... -
Android学习11-----多媒体技术(1) 绘制简单图形,Bitmap,Matrix
2012-11-12 08:48 1571一、绘制简单图 ... -
Android学习12-----手机服务(4) 传感器
2012-11-19 09:13 1992传感器一般用于游戏中,在 Android 系统中为 ... -
Android学习12-----手机服务(1) 取得电池电量和声音服务:AudioManager
2012-11-18 11:18 3434一、取得电池电量信息 ... -
Android学习10-----Android组件通信 (8) 桌面显示组件:AppWidget
2012-11-02 08:36 2006一、 AppWidget 在使用 Androi ... -
Android学习10-----Android组件通信 (7) 广播机制:Broadcast
2012-11-01 08:43 1483一、 广播: 广播也是一种信息的发送机制,在 ... -
Android学习10-----Android组件通信 (6) PendingIntent
2012-10-31 08:20 2207Intent 的主要功能是表示用 ... -
Android学习10-----Android组件通信 (4) 消息机制
2012-10-29 08:22 1518在 Android 操作系统中存在着消息队列的操作 ... -
Android学习10-----Android组件通信 (3) ActivityGroup
2012-10-26 08:23 2268导航栏在 Android 中的应用是很常见的,前面 ... -
Android学习10-----Android组件通信 (2) Activity生命周期
2012-10-25 08:16 1251Activity 是整个 Android 平台的基 ... -
Android学习10-----Android组件通信 (1) Intent
2012-10-24 08:43 1940在一个项目之中,会由多个 Activity ... -
Android判断是否有网络连接
2013-04-25 16:34 1407Android中判断有时候因为功能的需求,需要判断是否有网络 ...
相关推荐
android各组件详解- Service
Android下的服务与其他组件之间的通信,跨进程通信等示例。具体可以参见博客:http://www.cnblogs.com/plokmju/p/android_ServiceCommunication.html
Android安全开发基础--10--图形界面(UI)和碎片(Fragment)(上).pdf Android安全开发基础--11--图形界面(UI)和碎片(Fragment)(下).pdf Android安全开发基础--12--持久化技术.pdf Android安全开发基础--13-...
作者简介 -10 前言 -9 目录 -4 第1章 Android简介 1 1.1 一些背景信息 2 1.1.1 不远的过去 2 1.1.2 未来的前景 2 1.2 对Android的误解 3 1.3 开放的移动开发平台 3 1.4 自带的Android应用程序 4 1.5 Android ...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
Android组件通信和后台服务实验报告.pdf
service的启动,停止,绑定,取消绑定,以及IntentService的生命周期走向测试和IntentService与访问者信息通信过程,不清楚之处请参阅我的博客《Android开发四大组件之Service总结》
2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...
Android UI、常见控件和自定义控件、碎片、四大组件(Activity、Service、Broadcast和ContentProvider)、二维绘制、Canvas和Paint、多媒体开发等; 还讲解了Android开发的高级技术: Camera、地图、GPS、...
第1篇为入门篇,主要包括Android入门、搭建Android开发环境、认识Android模拟器、剖析Android程序、Android常用组件的使用、掌握布局管理器、Android程序调试与错误处理、Activity的使用和使用Intent进行通信等内容...
本章内容服务(Service)是Android系统中4个应用程序组件之一(其他的组件详见3.2节的内容)。服务主要用于两个目的:后台运行和跨进程访问。通过启动一个服务,可以在不显示界面的前提下在后台运行指定的任务,这样...
Service 是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。 此外,组件可以绑定到服务,以与之进行交互,甚至是...
该项目,是参考《Android 系统源代码情景分析 罗升阳.pdf》 5.3 Binder进程间通信应用实例; 在 Android 2.3.7 源码中使用; 1 把 binder 目录,拷贝到源码的 external 目录下; 2 在根目录下,编译: mmm ./...
服务 关键字:Android,服务,辅助,可打包,RemoteCallbackList Activity-Android组件之间的服务交互示例,这是Activity-Service之间的Android组件通信示例。 执照 Apache许可证版本2.0
服务(Service)是Android 系统中4 个应用程序组件之一(其他的组件详见3.2 节的内容)。服务主要 用于两个目的:后台运行和跨进程访问。通过启动一个服务,可以在不显示界面的前提下在后台运行指定 的任务,这样...
第1篇为入门篇,主要包括Android入门、搭建Android开发环境、认识Android模拟器、剖析Android程序、Android常用组件的使用、掌握布局管理器、Android程序调试与错误处理、Activity的使用和使用Intent进行通信等内容...
第10章 Content Provider组件的实现原理 10.1 Content Provider组件应用实例 10.1.1 ArticlesProvider 10.1.2 Article 10.2 Content Provider组件的启动过程 10.3 Content Provider组件的数据共享原理 10.3.1...
资源包含十一个实验任务书及实验报告(报告已完成) 实验1构建Android开发环境和Android应用程序 实验2基本视图组件的使用(一) 实验3:基本视图组件的使用(二...实验10 基于SQLite的通信录 实验11 基于文件的日程安排
Service 是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。 此外,组件可以绑定到服务,以与之进行交互,甚至是...
Android UI、常见控件和自定义控件、碎片、四大组件(Activity、Service、Broadcast和ContentProvider)、二维绘制、Canvas和Paint、多媒体开发等; 还讲解了Android开发的高级技术: Camera、地图、GPS、...