android基础教程之开机启动示例

Manifest.xml文件:


代码如下:

<service
            android:name=".DaemonService"
            android:enabled="true"
            android:process=".DaemonService" >
            <intent-filter android:priority="1000">
                <action android:name="cn.test.DaemonService" />

<category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>

注释:因为我们这个服务要一直在后台运行,所以不采用bindService的方式,而是直接采用startService的方式。

这样就不至于我们的程序结束,也把我们的服务也结束掉了。

代码如下:

package cn.start.test;

import java.util.List;
import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.app.Service;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;

public class DaemonService extends Service {

private static final String TAG = "Alarmreceiver";
    Handler hd1 = new Handler();
    int delay = 5000;

public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

@SuppressLint("NewApi")
    public void onCreate() {

System.out.println("服务启动成功。。。。。。。。。。");
        hd1.postDelayed(mTasks, delay);

}

private Runnable mTasks = new Runnable() {
        @SuppressLint("NewApi")
        public void run() {
            android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_FOREGROUND);
            if (checkMainAppIsActive()) {
                Log.d(TAG, "服务检测主应用还在运行");

} else {
                Log.d(TAG, "服务检测主应用已经关闭");
                Intent intent = getPackageManager().getLaunchIntentForPackage(
                        "cn.start.test");
                if (intent != null) {
                    DaemonService.this.startActivity(intent);
                    Log.d(TAG, "服务启动主应用程序。");
                } else {
                    Log.d(TAG, "服务检测到没有安装主应用,自动退出。");
                    return;
                }
            }
            hd1.postDelayed(mTasks, delay);

}
    };

/**
     * 检测是否主程序是否还在运行
     * @return
     */
    @SuppressLint({ "NewApi", "NewApi" })
    public boolean checkMainAppIsActive(){
        ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        //获取正在运行的应用
        List<RunningAppProcessInfo> run = am.getRunningAppProcesses();
        for(RunningAppProcessInfo ra : run){
            if(ra.processName.equals("cn.start.test")){
                return true;
            }
        }
        return false;
    }
}

开机自动启动程序,自然少不了开机启动广播了。

manifest.xml 文件:


代码如下:

<receiver android:name=".StartupReceiver" >
            <intent-filter android:priority="1000" >
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

代码如下:

public class StartupReceiver extends BroadcastReceiver {

@Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Intent i = new Intent(context,LoginActivity.class);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);

Intent serviceIntent = new Intent(context,DaemonService.class);
        context.startService(serviceIntent);
    }
}

总结:开机启动广播一定在manifest文件中注册好。定时器要注意定时延迟。

通过List<RunningAppProcessInfo> run = am.getRunningAppProcesses();判断自己的进程是否还在运行

通过getPackageManager().getLaunchIntentForPackage( "cn.start.test"); getPackageManager().getLaunchIntentForPackage( "cn.start.test");

来启动自己的程序。

(0)

相关推荐

  • Android开机自启动程序详解

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

  • android应用实现开机自动启动方法

    原理:Android系统在开机的时候会发出一个广播.这样我们就可以接收这个广播,然后启动我们的应用.广播接收器必须在xml里面配置,因为xml里面配置的广播接收器  是不随着应用的退出而退出的. 广播接收器: package com.yangshidesign.boot; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public c

  • Android 开机广播的使用及配置

    相关文章 Android 4.0 无法接收开机广播的问题 在配置文件AndroidManifest.xml中向系统注册receiver,子节点 intent-filter 表示接收android.intent.action.BOOT_COMPLETED消息 复制代码 代码如下: <receiver android:name="com.ray.ray.receiver.BootCompletedReceiver" > <intent-filter> <act

  • android开机自启动app示例分享

    复制代码 代码如下: /*开机自动启动APP*/public class BootReceiver extends BroadcastReceiver { @Overridepublic void onReceive(Context context, Intent intent) { Log.d("XRGPS", "BootReceiver.onReceive: " + intent.getAction());if (ACTION_BOOT_COMPLETED.eq

  • Android编程实现应用程序开机自启动的方法

    本文实例讲述了Android编程实现应用程序开机自启动的方法.分享给大家供大家参考,具体如下: Android在开机时自动启动一个应用程序 在启动时自动启动一个应用程序: 1.AndroidManifest.xml <receiver android:enabled="true" android:name=".BootUpReceiver" android:permission="android.permission.RECEIVE_BOOT_COM

  • Android实现开机自动启动Service或app的方法

    本文实例讲述了Android实现开机自动启动Service或app的方法.分享给大家供大家参考,具体如下: 第一步:首先创建一个广播接收者,重构其抽象方法 onReceive(Context context, Intent intent),在其中启动你想要启动的Service或app. import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; i

  • Android开机自启动服务的实现方法

    android实现开机自启动可能是移动操作系统中最简单的了,我们只需要监听一个开机启动的Broadcast(广播)即可.首先写一个Receiver(即广播监听器),继承BroadcastReceiver,如下所示: view source print? 复制代码 代码如下: public class BootReceiver extends BroadcastReceiver { private PendingIntent mAlarmSender; @Override public void

  • Android中实现开机自动启动服务(service)实例

    最近在将 HevSocks5Client 移植到 Android 上了,在经过增加 signalfd 和 timerfd 相关的系统调用支持后,就可以直接使用 NDK 编译出 executable 了.直接的 native exectuable 在 Android 系统总还是不太方便用哦.还是做成一个 apk 吧,暂定只写一个 service 并开机自动启用,无 activity 的. Java 中调用 native 程序我选择使用 JNI 方式,直接在 JNI_OnLoad 方法中调用 pth

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

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

  • android开机自启动原理与实现案例(附源码)

    原理: Android系统通过应用程序自行在系统中登记注册事件(即Intent)来响应系统产生的各类消息. Android系统为应用程序管理功能提供了大量的API,通过配置Intent和permission来实现各种功能. 开机自启动是通过 <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <category android:name="an

  • Android编程实现开机自动运行的方法

    本文实例讲述了Android编程实现开机自动运行的方法.分享给大家供大家参考,具体如下: 有些时候,应用需要在时就运行,例如某个自动从网上更新内容的后台service.怎样实现开机自动运行的应用?在撰写本文时,联想到高焕堂先生以"Don''t call me, I''ll call you back!"总结框架,真是说到点子上了.理解这句话的含义,许多有关Android平台上实现某种的问题,都能迎刃而解. 使用场景:开机后,自动运行,在上显示"Hello. I started

  • Android笔记之:App应用之启动界面SplashActivity的使用

    当前比较成熟一点的应用基本上都会在进入应用之显示一个启动界面.这个启动界面或简单,或复杂,或简陋,或华丽,用意不同,风格也不同.下面来观摩几个流行的应用的启动界面. 1. 货比三家以腾讯qq,新浪weibo,UC浏览器,游戏神庙逃亡等7个应用为例,比比看:(我认为最精美的界面应该是qq2012,虽然只有一张图,基本的应用名称,版本,图标这些信息都有,但是看着舒服,觉得美.) 2. 元素启动界面的本意是以友好用户界面来掩饰后台缓冲加载,让用户用平和等待的心情进入正常应用界面.但是因为启动界面是放在

随机推荐