一、首先介绍一下如何开机启动:

第一种:  监控RECEIVE_BOOT_COMPLETED,即开机启动事件

第二种: 监控sd卡mount事件  开机总会扫描sd卡吧? 监控sd卡事件也有类似开机启动效果,特别app安装在sd卡的情况下有些os是抓取不到RECEIVE_BOOT_COMPLETED

第三种: android:installLocation="internalOnly", 限制app的安装位置,使其能抓取到RECEIVE_BOOT_COMPLETED

我们也可以同时使用上面的方法

<receiver android:name="com.example.receiver.SystemEventReceiver"   android:permission="android.permission.RECEIVE_BOOT_COMPLETED">  <intent-filter>  <action android:name="android.intent.action.BOOT_COMPLETED" />   //监听开机启动</intent-filter>  <intent-filter>  <action android:name="RestartSerivcesForSystemEventReceiver" /> //监听系统服务的重启    </intent-filter>  <intent-filter>  <action android:name="android.intent.action.MEDIA_MOUNTED" />    //媒体安装,即sd卡的加载(仅个人翻译加猜想)<action android:name="android.intent.action.MEDIA_UNMOUNTED" />   //媒体卸载,即sd卡卸载<action android:name="android.intent.action.MEDIA_EJECT" />      //媒体弹出,即sd卡弹出<data android:scheme="file" >
</data>    </intent-filter>
</receiver>

  

二、由于广播不能单独的存在,必须要有相应的activity,我们可以在清单文件里修改activity的<category android:name="android.intent.category.DEFAULT" />,这样在安装的时候就不会存在图标了,然后静态注册监听开机事件,一开机就启动服务或者应用程序,这样我们就相当于完成了一个”没有activity的开机自启动其他应用程序或者启动某服务”

同理也可以实现,没有图标监听某些事件而采取相应操作。

服务里也能启动应用程序,activity和service都是继承context的,所有需要context的时候可以用this,broadcastreceiver是继承object的,但是在接受广播的时候会传进context和intent,所有也可以启动其他的服务或者应用程序。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.startselfreceiver"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="19" /><uses-permission  android:name="android.permission.RECEIVE_BOOT_COMPLETED"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.example.startselfreceiver.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity><service android:name=".Myservice"><intent-filter ><action android:name="myservice"/></intent-filter></service><receiver android:name=".Myreceiver"><intent-filter ><action android:name="android.intent.action.BOOT_COMPLETED"/></intent-filter></receiver></application></manifest>

  广播文件:

package com.example.startselfreceiver;import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.widget.Toast;public class Myreceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {System.out.println("收到广播了");Intent startserviceintent=new Intent("myservice");  //启动服务context.startService(startserviceintent);PackageManager p=context.getPackageManager();Intent in=p.getLaunchIntentForPackage("com.example.secondapp"); // 启动其他应用程序if(in!=null){context.startActivity(in);}else{Toast.makeText(context, "哟,赶紧下载安装这个APP吧", Toast.LENGTH_LONG).show();}//      Intent intent2 = new Intent("android.intent.action.MAIN");
//      intent2.addCategory("android.intent.category.LAUNCHER");
//      ComponentName cn = new ComponentName("com.example.secondapp", "com.example.secondapp.MainActivity");
//      intent2.setComponent(cn);
//      context.startActivity(intent2);  }}

  服务文件:

package com.example.startselfreceiver;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.OutputStream;import android.app.Service;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.os.IBinder;public class Myservice extends Service {@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubSystem.out.println("服务启动!");return null;}@Overridepublic void onCreate() {super.onCreate();try {
//              System.out.println(Environment.getDataDirectory().getAbsolutePath());OutputStream out=openFileOutput("zp.txt", MODE_PRIVATE);//Environment.getDataDirectory().getAbsolutePath()+,输出流只能在工程目录下创建文件,前面的参数                                                   //不能包含路径String st="my name is zp";out.write(st.getBytes());} catch (Exception e) {e.printStackTrace();}}}

  

转载于:https://www.cnblogs.com/bokeofzp/p/4734871.html

默认开机启动;通过Broadcastreceiver广播监听开机启动,实现没有activity的自启服务或者自启应用程序。...相关推荐

  1. oracle 12 无法启动,Oracle 12.2监听无法启动解决方法

    在自己的虚拟机的做实验,突然发现使用PL/SQL Developer无法连接到数据库,报错ORA-12514,说是监听没有启动. 先介绍虚拟机一下环境:redhat7.2+GI 12.2.0.1+Or ...

  2. Android 监听开机广播实现应用开机自启动

    应用开机自启动的原理是监听开机广播android.intent.action.BOOT_COMPLETED,然后在BroadcastReceiver中打开应用 实现BroadcastReceiver ...

  3. Android监听开机广播自启动程序

    应用开机自启动的原理是监听开机广播android.intent.action.BOOT_COMPLETED, 监听到该广播时会启动进程,进入Application 1.在Manifest中声明广播 & ...

  4. Android9.0 监听开机广播

    软件版本:9.0Go 硬件平台:MTK8175 近日,需要在如上平台监听开机广播,Android高版本限制了开机广播监听的权限,这次我添加到了SystemUI中,方法如下: 进入SystemUI源码目 ...

  5. Android 7.0 隐式广播-监听网络变化

    Android7.0前,Android系统前网络切换时,会发广播,业务只要监听广播即可. public class NetChangeReceiver extends BroadcastReceive ...

  6. Android广播监听usb插拔状态

    注册广播监听usb的挂载状态,过滤 vid 和 pid,以下是源码: class IdUsbManager private constructor() {val pid = 50010val vid ...

  7. oracle某些服务在有其他服务,oracle 监听无法启动,出现某些服务再未由其他服务或程序使用时自动停止。...

    答:IPC一般用于本地连接,比如sqlplus. 如果配置多个监听,要注意IPC key相同但端口号不同导致非默认监听无法启动的过程. 下面就是一个错误配置例子: $ vi $ORACLE_HOME/ ...

  8. android广播监听短信并显示内容

    still直接代码啦- <receiver android:name=".receive"> <intent-filter> <action andr ...

  9. linux下oracle数据库服务和监听的启动停止

    oracle数据库是重量级的,其管理非常复杂,将其在linux平台上的启动和关闭步骤整理一下. 安装完毕oracle以后,需要创建oracle系统用户,并在/home/oracle下面的.bash_p ...

最新文章

  1. 53位作者只有1个华人?NeurIPS 2021大奖揭晓,Google、DeepMind、斯坦福百花齐放
  2. +7白盒测试与黑盒测试的定义与区别
  3. AI超清修复张国荣《热·情》演唱会,22年前哥哥面部和舞台极度还原,歌迷泪奔...
  4. mongo连接不上Timed out after 30000
  5. redis:RDM连接阿里云redis服务器
  6. 爸爸我爱您(之十二)
  7. 1.web技术的前世今生
  8. AJHG | 人类遗传学领域一流期刊推荐
  9. 大数据在银行的七个应用实例
  10. sql_存储过程、函数、分支、循环
  11. 以太坊基础开发入门教程,完整入门【转】
  12. 教你如何破解无线网络密码(无线网络密码破解)
  13. web前端之跳一跳网页版小游戏
  14. 缓存架构技术:开课吧java高级架构师第七期笔记
  15. [转]windows 7 professional 64 bit SP1 change system language(sucess)
  16. 集智全球开源 聚合中国力量 Tungsten Fabric中文社区成立大会暨社区第一次全员大会成功举行
  17. 美容院如何优化预约服务?
  18. P5405 [CTS2019]氪金手游 【数学概率+树形dp】
  19. Python实用脚本实践
  20. 微信接口验证类php,微信公众平台消息接口校验与消息接口响应实例

热门文章

  1. 图片流写出 并带数据_第九章 IO流
  2. c++求平均值_云顶之弈S4:六射手娱乐吃鸡!人均刮痧王,每个人都是主C
  3. 计算机网络管理员中级理论知识试卷06,计算机网络管理员中级理论+技能完整题库及答案...
  4. 简单java socket_基于Java Socket实现一个简易在线聊天功能(一)
  5. java git_用 JGit 通过 Java 来操作 Git
  6. Sagemaker快速学习
  7. 计算机程序设计 期末考试题,《计算机编程ASP》期终习题A.doc
  8. android 仿微信选取相册_Android 仿微信 相册多图选择器
  9. plsql怎么查看存储过程中long变量的值_面试官:详细说下基本数据类型与装箱拆箱的过程...
  10. mysql注入写一句话_Mysql注入root权限直接写一句话马