zoukankan      html  css  js  c++  java
  • 1-AIII-Service实现开屏跳转到指定Activity

    普通Service特性

    1.startService方法启动,不关闭,则一直运行,即使退出了当前Activity
    2.基于此可以实现音乐播放器的后台播放
    3.基于此结合广播接收者可以实现开屏跳转到指定Activity、任意位置锁屏监听
    3-1.在服务开启时注册开关屏的广播接收者,在服务结束时注消开关屏的广播接收者
    3-2.每次开屏跳转到指定页面

    9414344-f9e9ef1bb14dfb72.gif
    Service实现开屏跳转到指定Activity.gif
    1.ScreenService.java
    public class ScreenService extends Service {
        private static final String TAG = "ScreenService";
        private ScreenReceiver receiver;
    
        @Override
        public IBinder onBind(Intent intent) {
            Log.i(TAG, "onBind");
            return null;
        }
    
        @Override//当服务第一次启动的时候调用
        public void onCreate() {//在这个方法里面注册广播接收者
            receiver = new ScreenReceiver();//[1]获取ScreenReceiver实例
            IntentFilter filter = new IntentFilter(); //[2]创建IntentFilter对象
            filter.addAction("android.intent.action.SCREEN_OFF");//[3]添加注册的事件
            filter.addAction("android.intent.action.SCREEN_ON");
            registerReceiver(receiver, filter);//[4]通过代码的方式注册
            super.onCreate();
        }
    
        @Override//当服务销毁的时候调用
        public void onDestroy() {
            unregisterReceiver(receiver);//当actvivity销毁的时候  取消注册广播接收者
            super.onDestroy();
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            Log.i(TAG, "onStartCommand");
            return super.onStartCommand(intent, flags, startId);
        }
    }
    
    2.开关屏的广播接收者:ScreenReceiver
    public class ScreenReceiver extends BroadcastReceiver {
    
        private static final String TAG = "ScreenReceiver";
        @Override
        public void onReceive(Context context, Intent intent) {
            //[1]获取到当前广播的事件类型
            String action = intent.getAction();
            //[2]对当前广播事件类型做一个判断
            if ("android.intent.action.SCREEN_OFF".equals(action)) {
                Log.i(TAG, "屏幕锁屏了");
            } else if ("android.intent.action.SCREEN_ON".equals(action)) {
                //每次开屏跳转到指定页面
                context.startActivity(new Intent(context, MainActivity.class));
                Log.i(TAG, "屏幕解锁了");
            }
        }
    }
    
    3.注册服务:app/src/main/AndroidManifest.xml
    <service android:name=".base.ScreenService"/>
    
    4.Activity中开启服务:
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            startService(new Intent(this, ScreenService.class));
        }
    }
    

    onCreate==>onStartCommand
    其中onCreate只会执行1次每次启动都会执行onStartCommand


    后记、

    1.声明:

    [1]本文由张风捷特烈原创,转载请注明
    [2]欢迎广大编程爱好者共同交流
    [3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
    [4]你的喜欢与支持将是我最大的动力

    2.连接传送门:

    更多安卓技术欢迎访问:安卓技术栈
    我的github地址:欢迎star
    简书首发,腾讯云+社区同步更新
    张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com

    3.联系我

    QQ:1981462002
    邮箱:1981462002@qq.com
    微信:zdl1994328

    4.欢迎关注我的微信公众号,最新精彩文章,及时送达:
    9414344-c474349cd3bd4b82.jpg
    公众号.jpg
  • 相关阅读:
    day7 面向对象 静态方法 类方法 属性方法 类的特殊成员方法 元类 反射 异常处理
    day6 面向对象 封装 继承 多态 类与实例在内存中的关系 经典类和新式类
    day5 time datetime random os sys shutil json pickle shelve xml configparser hashlib subprocess logging re正则 python计算器
    kafka常用操作命令
    linux基础
    django学习1——初识web应用程序
    mysql数据库(三)——pymysql模块
    mysql数据库(二)——表的查询
    mysql数据库(一)
    Python常用模块——re模块
  • 原文地址:https://www.cnblogs.com/toly-top/p/9781944.html
Copyright © 2011-2022 走看看