service开机启动及自启(由于android权限的控制,可能有问题)

1.在mainfest.xml中注册

<!-- 自启服务广播 -->
        <receiver
            android:name="com.bdkj.gmys.broadcast.BootBroadCast"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        <receiver android:name="com.bdkj.gmys.broadcast.Alarmreceiver" >
            <intent-filter>
                <action android:name="arui.alarm.action" />
            </intent-filter>
        </receiver>

2.设置监听(设置计时器,不定时去检查服务)

public class BootBroadCast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent mintent) {

if (Intent.ACTION_BOOT_COMPLETED.equals(mintent.getAction())) {
            // 启动完成
            Intent intent = new Intent(context, Alarmreceiver.class);
            intent.setAction("arui.alarm.action");
            PendingIntent sender = PendingIntent.getBroadcast(context, 0,
                    intent, 0);
            long firstime = SystemClock.elapsedRealtime();
            AlarmManager am = (AlarmManager) context
                    .getSystemService(Context.ALARM_SERVICE);

// 10秒一个周期,不停的发送广播
            am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime,
                    10 * 1000, sender);
        }

}
}

public class Alarmreceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals("arui.alarm.action")) {
            if (!isServiceWork(context, "com.easemob.chat.EMChatService")) {
                // 环信service
                Intent i = new Intent();
                i.setClass(context, EMChatService.class);
                context.startService(i);
            }
            if (!isServiceWork(context, "com.umeng.message.UmengService")) {
                // 友盟service
                Intent n = new Intent();
                n.setClass(context, UmengService.class);
                context.startService(n);
            }
        }
    }

/**
     * 判断某个服务是否正在运行的方法
     *
     * @param mContext
     * @param serviceName
     *            是包名+服务的类名(例如:net.loonggg.testbackstage.TestService)
     * @return true代表正在运行,false代表服务没有正在运行
     */
    public boolean isServiceWork(Context mContext, String serviceName) {
        boolean isWork = false;
        ActivityManager myAM = (ActivityManager) mContext
                .getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningServiceInfo> myList = myAM.getRunningServices(40);
        if (myList.size() <= 0) {
            return false;
        }
        for (int i = 0; i < myList.size(); i++) {
            String mName = myList.get(i).service.getClassName().toString();
            if (mName.equals(serviceName)) {
                isWork = true;
                break;
            }
        }
        return isWork;
    }

时间: 2024-11-03 16:41:38

service开机启动及自启(由于android权限的控制,可能有问题)的相关文章

【Android开发日记】初次探秘Android Service!Service开机启动+重力感应+弹窗+保持运行

前言: 最近在写一个小程序,需求是手机摇一摇就弹窗出来.第一次使用了Service,学习了两天,实现了Service弹窗,开机启动,Activity启动和销毁.满足了自己的需求.现记录学习心得.希望能给你带来一些帮助. 1.Service创建:重写4个方法 onBind():返回一个IBinder对象,这个对象可以使应用程序与Service通信.如果用startService.stopService启动和关闭Service的话,Service和访问者是无法通信交换数据的.onBind()返回值设

安卓开机启动service后台运行

Android开机启动时会发送一个广播android.intent.action.BOOT_COMPLETED,捕捉到这个广播,然后可以进行相应的操作,比如:通过捕捉开机广播启动Activity,或者Service. 1.新建BootBroadcastReceiver类,继承BroadcastReceiver. public class BootBroadcastReceiver extends BroadcastReceiver { private final String ACTION_BO

(转)CentOS 7 sytemctl 自定义服务开机启动

CentOS 7 sytemctl 自定义服务开机启动 原文:http://blog.csdn.net/ithomer/article/details/51766319 CentOS 7继承了RHEL 7的新的特性,例如强大的systemctl,而systemctl的使用也使得系统服务的/etc/init.d的启动脚本的方式发生重大改变,也大幅提高了系统服务的运行效率.但服务的配置和以往也发生了极大的不同,变的简单而易用了许多(仁者见仁,米扑博客). systemd提供更优秀的框架以表示系统服务

Centos7 设置Mongodb开机启动-自定义服务

一.官网下载 mongodb,解压到指定目录 本机mongodb目录为:/usr/context/mongodb/mongodb-3.2.10/ 二 .编写配置文件,主要指定数据库文件,日志文件,以及一些启动参数. (1).在mongodb下新建data文件夹,以及子文件夹db,logs, 在logs中新建mongodb.log日志文件,其中db文件夹用来存储数据库文件,logs用来存储日志文件 (2).在mongodb-3.2.10/bin/目录下新建mongodb.conf配置文件,内容如下

Win7 开机启动

1.注册表里面写代码,设置程序以开机启动; 但这样会需要管理员权限,添加程序以管理员权限启动后,又无法直接进入到软件启动界面,UAC控制 代码一: /// <summary> /// 设置应用程序开机自动运行 /// </summary> /// <param name="fileName">应用程序的文件名</param> /// <param name="isAutoRun">是否自动运行,为false

android开发教程之开机启动服务service示例

个例子实现的功能是:1,安装程序后看的一个Activity程序界面,里面有个按钮,点击按钮就会启动一个Service服务,此时在设置程序管理里面会看的有个Activity和一个Service服务运行2,如果手机关机重启,会触发你的程序里面的Service服务,当然,手机启动后是看不到你的程序界面.好比手机里面自带的闹钟功能,手机重启看不到闹钟设置界面只是启动服务,时间到了,闹钟就好响铃提醒. 程序代码是: 首先要有一个用于开机启动的Activity,给你们的按钮设置OnClickListener

在android系统上写C语言程序--开机启动该程序不进入安卓系统

今天要写的这篇博文意义重大,也是网上很少有的,这是在我工作中学会的一项技术,当然,它也是由简单的问题组合而来的.如何在安卓中写C语言程序,调试安卓驱动,测试程序的的一项重要技能,下面我就不说废话了,直接说实用的,怎么用这个东西. 关于这个问题,相信很多学Android的都会去关注这个问题,大家普遍会有个这样的疑问:安卓是怎么跑起来的? 最简单的说法,安卓系统是这样加载的: Bootloader------Kernel(对应平台版本的Linux内核)------filesystem文件系统(这个就

Android开机启动Activity界面

1,原理: 当Android系统完成BOOT阶段之后,就会发送一条名为 ACTION_BOOT_COMPLETED 的广播,我们便可在一个BroadcastReceiver中捕获这条广播,然后启动我们的Activity或者Service,当然要注意的是,我们的application必须具有捕获该广播的权限,下面请看具体步骤: 第一步:首先要有一个用于开机启动的Activity或者Service,这里以系统自己创建的最简单的Activity为例进行讲解. package com.billhoo.s

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

一.首先介绍一下如何开机启动: 第一种:  监控RECEIVE_BOOT_COMPLETED,即开机启动事件 第二种: 监控sd卡mount事件  开机总会扫描sd卡吧? 监控sd卡事件也有类似开机启动效果,特别app安装在sd卡的情况下有些os是抓取不到RECEIVE_BOOT_COMPLETED 第三种: android:installLocation="internalOnly", 限制app的安装位置,使其能抓取到RECEIVE_BOOT_COMPLETED 我们也可以同时使用