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

所属分类: 软件编程 / Android 阅读数: 1269
收藏 0 赞 0 分享

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");

来启动自己的程序。

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多