通过开机广播(broadcast)通知应用
1. 概念
开机的时候,系统会发送一则广播,所有有标记的应用(通过广播接收者)都会获取得到,然后可以通过广播接收者去处理一些事情,比如启动该应用,或者处理数据;
代码:https://github.com/maogefff/Android-Test-Sample/tree/master/%E5%BC%80%E6%9C%BA%E5%B9%BF%E6%92%AD%E6%8E%A5%E6%94%B6%E7%A4%BA%E4%BE%8B
2. 代码
在这里做一个实验,就是开机以后,广播接收者接收到广播,然后通过广播调用activity(其实就相当于启动应用了)
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.aplex.serialselect"> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity> <!-- 添加接收开机启动广播 -->
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<!-- <category android:name="android.intent.category.LAUNCHER"/>这里不能加这句,因为加了这句,默认开启应用就是启动广播,而不是acivity了 -->
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver> </application> </manifest>
MyReceiver.java

package com.example.aplex.serialselect; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log; public class MyReceiver extends BroadcastReceiver { public final static String ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED"; // 重写onReceive方法
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(ACTION_BOOT_COMPLETED)){
// 后边的XXX.class就是要启动的服务
Intent actIntent = new Intent(context.getApplicationContext(), MainActivity.class);
actIntent.setAction("android.intent.action.MAIN");
actIntent.addCategory("android.intent.category.LAUNCHER");
actIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(actIntent);
Log.e("TAG", "开机自动服务自动启动.....");
// 启动应用
Intent serIntent= new Intent(context, MainActivity.class);
serIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startService(serIntent);
Log.e("TAG", "开机程序自动启动.....");
}
}
}
MainActivity.java
package com.example.aplex.serialselect; import android.app.Activity;
import android.os.Bundle; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
3. 效果
修改为系统应用
desk@desk-ubuntu:~/myandroid$ cat packages/apps/SerialSelect/app/src/main/Android.mk
LOCAL_PATH := $(call my-dir)
#清除所有变量
include $(CLEAR_VARS) #不管是调试版本还是发行版本,都编译
LOCAL_MODULE_TAGS := optional #源码目录
LOCAL_SRC_FILES := $(call all-java-files-under, java) LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res #测试,我的作用是强制忽略多语言问题错误
#LOCAL_MODULE_TAGS := tests
#生成的APK的名字
LOCAL_PACKAGE_NAME := SelectSerial
#系统签名
LOCAL_CERTIFICATE := platform
#编译为APK应用
include $(BUILD_PACKAGE) include $(call all-makefiles-under,$(LOCAL_PATH))
因为这里是真机操作,显示就是一片白屏的
通过开机广播(broadcast)通知应用的更多相关文章
- Android 中的广播(Broadcast)
Android 广播(broadcast) 饮水思源 本文章内容学习和总结自 郭霖大神:<Android第一行代码> Overview 就像我们的学校里的喇叭一样,是用来通知的.而Andr ...
- 为什么监听不到开机广播action.BOOT_COMPLETED
为什么监听不到开机广播action.BOOT_COMPLETED 1. 说明 Android手机开机后,会发送android.intent.action.BOOT_COMPLETED广播,监听这个广播 ...
- 【Android】15.0 第15章 广播和通知—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-28 一.简介 广播(Broadcast):其功能类似于收音机的广播,你只要调到那个台(只要在接收的类中注册了要接收的广播),就能 ...
- 【Android】Android 4.0 无法接收开机广播的问题
[Android]Android 4.0 无法接收开机广播的问题 前面的文章 Android 开机广播的使用 中 已经提到Android的开机启动,但是在Android 4.0 有时可以接收到开机 ...
- Android广播Broadcast
Android Broadcast简单认识 Broadcast是应用程序间传输信息的一种机制,BroadcastReceiver是对发送出来的广播(Broadcast)进行过滤并接收相应的一类组件. ...
- Android中的广播Broadcast详解
今天来看一下Android中的广播机制,我们知道广播Broadcast是Android中的四大组件之一,可见他的重要性了,当然它的用途也很大的,比如一些系统的广播:电量低.开机.锁屏等一些操作都会发送 ...
- Android 进程常驻----开机广播的简单守护以及总结
这是一个轻量级的库,配置几行代码,就可以实现在Android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下,clean master获取root权限下都无法杀死进程 支持系统2.3到 ...
- 广播Broadcast Receiver
广播的类型: 1.标准广播(Normal broadcat) 完全异步执行的广播,所有广播接收器同一时间接收广播消息. 效率高,但无法被截断. 2.有序广播 同步执行的广播,同一时刻只能有一个广播接收 ...
- Android开机广播
有些时候我们常常需要某个程序开机运行.在这个时候我们就需要监听系统的开机广播,然后启动我们的程序即可. 不多说 直接上代码: public class BootReceiver extends Bro ...
- ACM/ICPC 之 数据结构-邻接表+BFS(TSH OJ-无线广播Broadcast)
这道题中若能够构成互不干扰的区域,其构成的图其实就是汉密尔顿路(Hamilton road),因此如果能够观察出来可以直接转化为汉密尔顿路的存在性证明,即便不能观察,我相信ACMer也能转化为BFS问 ...
随机推荐
- 手动编译安装lamp之php
转自马哥教育讲课文档 三.编译安装php-5.4.8 1.解决依赖关系: 请配置好yum源(可以是本地系统光盘)后执行如下命令: # yum -y groupinstall "X Softw ...
- CSS3 线性渐变linear-gradient
CSS3 Gradient 分为 linear-gradient(线性渐变)和 radial-gradient(径 向渐变).为了更好的应用 CSS3 Gradient,需要先了解一下目前的几种现代浏 ...
- js虚拟数字小键盘
效果图 页面代码: @Html.TextBoxFor(m=>Model.FBP[i].RealNumb,new{onclick="showKeyboard('txtRealNumbOp ...
- 读取本地json文件,转出为指定格式json
引用添加Json.Net 引用命名空间 using Newtonsoft.Json //读取自定目录下的json文件 StreamReader sr = new StreamReader(@" ...
- “全栈2019”Java多线程第二章:创建多线程之继承Thread类
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- Mutation Observer
MutationEvent Mutation Observer 变动观察器, 等待所有脚本任务完成后,才会运行(即异步触发方式) 把DOM变动记录封装成一个数组进行处理,而不是一条条个别处理DOM变动 ...
- 初识gulp
之前一段时间学习使用了gulp自动化构建工具,并在现在使用的项目上部署使用,同时在这做个笔记进行小结,以便加深记忆,如有理解错误的地方请不吝赐教 gulp 的解释我就不多说了 这里引用官网的一句话 ...
- string、char *的转换
string转char* 主要有三种方法可以将str转换为char*类型,分别是:data(); c_str(); copy(); data()方法 string str = "hello& ...
- /proc/xxx/maps简要记录
定位内存泄漏基本上是从宏观到微观,进而定位到代码位置. 从/proc/meminfo可以看到整个系统内存消耗情况,使用top可以看到每个进程的VIRT(虚拟内存)和RES(实际占用内存),基本上就可以 ...
- [Alpha]Scrum Meeting#5
github 本次会议项目由PM召开,时间为4月7日晚上10点30分 时长10分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写博客目录 整理清明开会记录 SiMrua 模型再训练(issue#1 ...