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

1package com.example; 2 3import android.app.AlertDialog; 4import android.content.DialogInterface; 5import android.os.Bundle; 6import android.view.*; 7import android.widget.Toast; 8 9public class MainActivity extends Activity { // 收到消息启动此Activity 10 @Override 11 public void onCreate(Bundle savedInstanceState) { 12 super.onCreate(savedInstanceState); 13 super.setIntegerProperty("splashscreen", R.drawable.wandapad_splash); 14 TextView tv = new TextView(this); 15 tv.setText("Hello这是MainActivity"); 16 setContentView(tv); 17 }

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

1package com.example; 2 3import android.content.BroadcastReceiver; 4import android.content.Context; 5import android.content.Intent; 6 7/** 8 * Created with IntelliJ IDEA. 9 * User: 郏高阳 10 * Date: 13-6-5 11 * Time: 下午8:25 12 * To change this template use File | Settings | File Templates. 13 */ 14public class BootBroadcastReceiver extends BroadcastReceiver { 15 static final String ACTION = "android.intent.action.BOOT_COMPLETED"; 16 17 @Override 18 public void onReceive(Context context, Intent intent) { 19 if (intent.getAction().equals(ACTION)) { 20 Intent mainActivityIntent = new Intent(context, MainActivity.class); // 要启动的Activity 21 mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 22 context.startActivity(mainActivityIntent); 23 } 24 } 25}

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

3、配置文件:AndroidManifest.xml

在application内添加一下配置:

1<receiver android:name=".BootBroadcastReceiver"> 2 <intent-filter> 3 <action android:name="android.intent.action.BOOT_COMPLETED" /> 4 </intent-filter> 5 </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了。

❤犒劳一杯咖啡❤

原文链接:http://my.oschina.net/jgy/blog/135858

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )