zoukankan      html  css  js  c++  java
  • Android开机自动运行APP——BroadcastReceiver

    前言:

    有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内容的后台service。怎样实现开机自动运行的应用?在撰写本文时,联想到高焕堂先生以“Don't call me, I'll call you back!”总结Android框架,真是说到点子上了。理解这句话的含义,许多有关Android平台上实现某种功能的问题,都能迎刃而解。

    使用场景:

    手机开机后,自动运行程序。

    {只是最近本人在做万达大歌星点餐系统,需要用到系统启动直接启动App避免服务员玩别的app才研究的,以下分享是本人参考网络,亲自尝试成功的代码,贴出来与大家分享,希望能帮助更多的人!不懂的可以问我哦。QQ:11745405 }

    背景知识:

    当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为android.intent.action.BOOT_COMPLETED。只要在程序中“捕捉”到这个消息,再启动之即可。记住,Android框架说:Don't call me, I'll call you back。我们要做的是等到接收这个消息,而实现的手段就是实现一个BroadcastReceiver。

    代码解析:

    1、界面MainActivity.java

    package com.example;
    
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.os.Bundle;
    import android.view.*;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {   // 收到消息启动此Activity
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            super.setIntegerProperty("splashscreen", R.drawable.wandapad_splash);
            TextView tv = new TextView(this);
            tv.setText("Hello这是MainActivity");
            setContentView(tv);
        }

    2、接收广播消息:BootBroadcastReceiver.java

    package com.example;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    
    /**
     * Created with IntelliJ IDEA.
     * User: 郏高阳
     * Date: 13-6-5
     * Time: 下午8:25
     * To change this template use File | Settings | File Templates.
     */
    public class BootBroadcastReceiver extends BroadcastReceiver {
        static final String ACTION = "android.intent.action.BOOT_COMPLETED";
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(ACTION)) {
                Intent mainActivityIntent = new Intent(context, MainActivity.class);  // 要启动的Activity
                mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(mainActivityIntent);
            }
        }
    }

    该类派生自BroadcastReceiver,覆载方法onReceive中,检测接收到的Intent是否符合BOOT_COMPLETED,如果符合,则启动MainActivity。

    3、配置文件:AndroidManifest.xml

    application内添加一下配置:

    <receiver android:name=".BootBroadcastReceiver">
      <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
       </intent-filter>
      </receiver>

    向系统注册了一个receiver,子节点intent-filter表示接收android.intent.action.BOOT_COMPLETED消息。

    4、在manifest中添加以下权限

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>

    5、大功告成!

    延伸思考:

    在多数情况下,要自动运行的不是有界面的程序,而是在后台运行的service。此时,就要用startService来启动相应的service了。

  • 相关阅读:
    I.MX6 Surfaceflinger 机制
    理解 Android Fragment
    RPi 2B DDNS 动态域名
    RPi 2B IPC webcam server
    理解 Android MVP 开发模式
    I.MX6 system.img unpack repack
    can't set android permissions
    VMware Ubuntu 共享文件夹
    解决oracle数据库连接不上的问题
    perfect-scrollbar示例
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6708564.html
Copyright © 2011-2022 走看看