为了账号安全,请及时绑定邮箱和手机立即绑定

Android攻城狮的第二门课(第3季)

难度初级
时长 6小时 0分
学习人数
综合评分9.57
162人评价 查看评价
9.9 内容实用
9.5 简洁易懂
9.3 逻辑清晰
  • getSystemService 是 Android 很重要的一个 API , 它是 Activity 的一个方法,根据传入的 NAME 来获取对应的 Object,然后转换成相应的服务对象( XxxManager )。 迄今所学,无不如此: 获取系统的网络连接服务: ConnectivityManager mConnectivityManager = (ConnectivityManager)context.getSystemService(CONNECTIVITY_SERVICE); 获取系统的 WiFi 服务: WifiManager wifimanager = (WifiManager) this.getSystemService(WIFI_SERVICE); 获取系统的 Auido(音响/声音)服务: AudioManager mAudioManager = (AudioManager) this.getSystemService(AUDIO_SERVICE); 获取系统的 Activity 服务: ActivityManager mActivityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 别忘了添加权限: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.GET_TASKS"/>
    查看全部
  • 通过系统服务获取系统音量和当前Activity的包名: 对应的系统服务分别是:AUDIO_SERVICE 和 ACTIVITY_SERVICE。 需要添加权限: <uses-permission android:name="android.permission.GET_TASKS"/> 点击事件的编写: case R.id.geyVoice: AudioManager mAudioManager = (AudioManager) this.getSystemService(AUDIO_SERVICE); int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM); // 最大“系统”音量 int current = mAudioManager.getStreamVolume(AudioManager.STREAM_RING); // 当前“铃声”音量 Toast.makeText(this, "最大系统音量:"+max+",当前铃声音量:"+current, Toast.LENGTH_SHORT).show(); break; case R.id.getPackageName: ActivityManager mActivityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); // 获取当前Activity的运行状态 String packageName = mActivityManager.getRunningTasks(1).get(0).topActivity.getPackageName(); //topActivity:最上面的Activity,也就是当前Activity。调用getPackageName()获取包名 Toast.makeText(this, "当前运行的Activity的包名:"+packageName, Toast.LENGTH_SHORT).show(); break;
    查看全部
  • 安卓系统默认对于一些比较危险的操作或者高权限的操作都要求必须具有权限才能执行,例如发送短信、读取通讯录、打开/关闭WiFi等等。 例如这节课的示例是要查看网络状态,就需要添加相应权限: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses> 添加这个权限后,用户在安装这个应用的时候,安装界面就会提示该应用需要获取网络状态。 ------------------------- 如图,是获取 WIFI 状态,然后做开启或关闭 WIFI 的操作。 同样要先获取权限: <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 读取WiFi状态 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 改变WiFi状态
    查看全部
  • 使用系统提供的网络连接服务 CONNECTIVITY_SERVICE: 1. 定义一个Button,添加点击事件“doClick”; 2. 编写一个判断网络连接的类 isNetworkConnected(Context context),之所以要使用上下文作为参数,是因为使用系统服务要用到 context: public boolean isNetworkConnected(Context context) { ConnectivityManager mConnectivityManager = (ConnectivityManager)context.getSystemService(CONNECTIVITY_SERVICE); NetworkInfo mNetworkInfom = mConnectivityManager.getActiveNetworkInfo(); if (mNetworkInfom != null) return true; else return false; } 3. 如图,编写点击事件: public void doClick(View view){ switch (view.getId()){ case R.id.network: if(isNetworkConnected(this)){ Toast.makeText(this, "网络已经打开", Toast.LENGTH_SHORT).show(); } else{ Toast.makeText(this, "网络未连接", Toast.LENGTH_SHORT).show(); } break; } } 4. 在配置文档中添加权限: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    查看全部
  • 后台Service在系统启动时被SystemService开启 * MountService:监听是否有SD卡安装及移除 * ClipboardService:提供剪切板功能 * PackageManagerService:提供软件包的安装、移除和查看 * 电量、网络连接状态等等 getSystemService() * Activity的一个方法 * 传入NAME -> Object -> 服务对象
    查看全部
    0 采集 收起 来源:系统服务概述

    2018-03-22

  • 常用系统服务2
    查看全部
    0 采集 收起 来源:系统服务概述

    2017-03-28

  • 常用系统服务 LAYOUT_INFLATER_SERVICE 的作用和 findViewById() 差不多。
    查看全部
    0 采集 收起 来源:系统服务概述

    2017-03-28

  • BindService: 支持数据回传。 什么时候使用Start?当服务不需要和启动源有任何关联的时候。这样有可能造成的结果:程序都退出了,但Service依然存在,为什么呢?因为二者没有关系。 不过,利用这种特性,也可以做一些特殊的应用,比如:UI不要了,但后台操作仍然继续的例子。但比较麻烦是就是:数据没办法回传了。 所以,既想让它们(服务和启动源)分离,又想得到回传数据,就需要将 Start 和 Bind 混合使用。
    查看全部
    0 采集 收起 来源:Bind启动

    2017-03-28

  • 单纯使用 BindService还是有很多隐患的。实际上可以结合 StartService 和 BindService。如图,使用同一个通信 intent2 ,就可以实现。 但比较麻烦的是,你打开了服务,就要相应地去关闭服务,所以要在 MainActivity 中重写 onDestroy()方法: protected void onDestroy() { super.onDestroy(); stopService(intent2); unbindService(conn); } 这样在 Activity 被销毁的时候,就会停止服务,并解除了绑定。这样一来,即使程序被强制退出,也不会报错(之前会报一些和Service相关的错)。
    查看全部
    0 采集 收起 来源:Bind启动

    2017-03-28

  • 如图,是 ServiceConnection 的实现。 获取到服务对象 service 后,就可以使用对象里面的各种方法了,比如我们在 MyBindService 定义的play()、pause()、previous()、next()方法。 可以在监听事件中追加几个case,使用诸如 service.play() 这样的方式,就可以调用相应的方法。
    查看全部
    0 采集 收起 来源:Bind启动

    2017-03-28

  • BindService编程步骤: 1. 创建一个类 MyBindService, 继承 Service,并实现如下几个方法: public void onCreate() { super.onCreate(); Log.i("info","BindService----onCreate()"); } public IBinder onBind(Intent intent) { Log.i("info","BindService----onBind()"); return null; } public boolean onUnbind(Intent intent) { Log.i("info","BindService----onUnbind()"); return super.onUnbind(intent); } public void onDestroy() { Log.i("info","BindService----onDestroy()"); super.onDestroy(); } 2. 在配置文件中注册服务: <service android:name=".MyBindService"></service> 3. 编写点击事件: case R.id.bind: // 绑定服务 intent2 = new Intent(this,MyBindService.class); bindService(intent2, conn, Service.BIND_AUTO_CREATE); //第二个参数是连接对象,第三个参数是必须要填的一个常量,没写的话将无法自动创建Service。 break; case R.id.unbind: // 解绑服务 unbindService(conn); break; ----------------------------- 注意:解绑只能使用一次,多次使用会报错,另外当启动源在没有解绑的情况下退出程序也会报错。 摘自评论区: bindService();方法中的第二个参数必须实现,ServiceConnection conn = new ServiceConnection(){};里边有两个方法可以暂时不管。如果写成null是会报错的。
    查看全部
    0 采集 收起 来源:Bind启动

    2018-03-22

  • 代码实现: 1. 定义若干个按钮,每个按钮都带有点击事件; 2. 创建一个类继承Service(后面该类将作为Intent通信的对象之一),实现几个方法: public void onCreate() { // 由于只执行一次,一般把初始化操作放在这里 super.onCreate(); Log.i("info","Service----onCreate()"); } public int onStartCommand(Intent intent, int flags, int startId) { Log.i("info","Service----onStartCommand()"); return super.onStartCommand(intent, flags, startId); } public void onDestroy() { super.onDestroy(); Log.i("info","Service----onDestroy()"); } // IBinder是一个抽象的方法,这里用不到 public IBinder onBind(Intent intent) { Log.i("info","Service----onBind()"); return null; } 3. 在配置文件中注册服务 <service android:name=".MyStartService"/> 4. 如图,编写点击事件: public void doClick(View view){ switch (view.getId()){ case R.id.btn_start: // 开始服务 intent1 = new Intent(this,MyStartService.class); // Intent 实现组件之间的通信,这里是Activity和Service之间。 startService(intent1); // 和以前的 stratActivity() 很类似。 break; case R.id.btn_stop: // 停止服务 stopService(intent1); break; } }
    查看全部
    0 采集 收起 来源:Start启动

    2018-03-22

  • 1. 本地服务(Local Service) - 应用程序内部 - startService(启动服务)、stopService(在“启动源”或者 Activity 中停止服务)、stopSelf(在Service停止服务)、stopSelfResult(在Service中停止服务),后面两种都是服务的自我停止。 - bindService(绑定服务)、unbindService(解绑) 通过 startService 或者 bindService 都可以启动服务。 2. 远程服务(Remote Service) - Android系统内部的应用程序之间(不是手机之间) - 定义 IBinder 接口,通过它,把数据暴露出来,然后把数据提供给启动源或者其他程序。 远程服务只能通过 IBinder 去启动服务。 -------------- 我们知道一个Activity是有生命周期的,并且必须在配置文档中进行注册。而Service和Activity是类似的,有类似的生命周期,也必须注册。 继承关系: Service 继承 ContextWrapper,Activity 继承 ContextThemeWrapper,二者共同拥有一个“祖宗类”——Context。 ------------------ 如图所示是 Service 的两种生命周期(分别以startService和bindService启动)。 Start方式特点: - 服务跟启动源没有任何联系 - 无法得到服务对象 Bind方式特点: - 通过 Ibinder 接口实例,返回一个ServiceConnection对象给启动源 - 通过 ServiceConnection对象的相关方法可以得到Service对象
    查看全部
    0 采集 收起 来源:Servie概述

    2017-03-27

  • 组件篇——Service 当Android系统内存不足的时候,会杀死优先级别较低的Activity,而基本上Service的优先级要高于Activity,所以程序中如果含有 Service,那么该程序是很难被杀掉的,而且即使 Service 被杀掉,它也很容易自己再次启动,除非人为去停掉。 ------------------- Service 本身不能做耗时操作(因为它运行在主线程)。耗时操作交给 Handle 或者 AsyncTask 去处理。
    查看全部
    0 采集 收起 来源:Servie概述

    2017-03-27

  • 异步广播之所以又叫“粘滞性广播”,是因为它的广播会一直存在,不像其他广播一用完就会被销毁。 所以这里的示例将采取“先发送广播,后注册接收者”,如果接收者还能接收到广播,就能说明异步广播的“粘滞性”。 注意:“粘滞性”是需要在配置文件中添加权限的: <uses-permission android:name="android.permission.BROADCAST_STICKY"></uses> 动态注册的接收者一定要在组件结束的时候销毁掉: @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(bc3); unregisterReceiver(bc7); } 所以动态注册的这些接收者本身,最好定义为全局变量,然后在方法中初始化。
    查看全部

举报

0/150
提交
取消
课程须知
本课程是Android开发课程的中后期部分,学习之前要求对一些知识点有一定的了解: 1、已经掌握了Java基础 2、已经熟悉或者了解Android中的监听事件原理 3、已经熟悉或者了解一种以上的数据库,并掌握基本的SQL语句
老师告诉你能学到什么?
1、初步掌握Android手势识别的原理以及实际使用 2、初步掌握Android的数据存储方式 3、深度了解Android中的组件 4、熟悉了解Android常用的系统服务并对服务的使用有新的认识

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!