Android 应用 自启动方法

权限:

<!-- 开机启动 -->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

application标签下的receiver

        <receiver android:name="com.blt.phoneuse.BootCompleteReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>



package com.blt.phoneuse;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

import com.blt.framework.util.BLTLog;
import com.blt.phoneuse.activity.process.ServiceProcess;

public class BootCompleteReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		BLTLog.d("bltbltblt  LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("bltbltblt  LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("bltbltblt  LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("bltbltblt  LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("bltbltblt  LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("bltbltblt  LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("bltbltblt  LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "bltbltblt recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "recevie boot completed ... ");
		BLTLog.d("LibraryTestActivity", "recevie boot completed ... ");
		
		Intent i = new Intent(context, ServiceProcess.class);
		i.setAction(ServiceProcess.PROCESS_GET);
		context.startService(i);
	}

}


service中的内容,注意onStartCommand中的内容

package com.blt.phoneuse.activity.process;

import android.app.IntentService;
import android.app.Notification;
import android.content.Intent;
import android.util.Log;

public class ServiceProcess extends IntentService {
	private final static String TAG = "ProcessService";
	public final static String PROCESS_GET = "PROCESS_GET";

	/**
	 * 状态为锁屏
	 */
	public final static String STATE_LOCK = "_SCREEN_LOCK";

	public ServiceProcess() {
		super(TAG);
	}

	@Override
	protected void onHandleIntent(Intent intent) {
		Log.d(TAG, TAG);
		if (intent.getAction().equals(PROCESS_GET)) {
			// 自己要做的事
		}
	}

	/**
	 * 每次调用startService(Intent)的时候,<br>
	 * 都会调用该Service对象的onStartCommand(Intent,int,int)方法,<br>
	 * 然后在onStartCommand方法中做一些处理。
	 */
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		Log.v(TAG, "startCommand");
		/*
		 * START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。 随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。
		 * START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。 START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
		 * START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。
		 */
		flags = START_STICKY;// 如果服务被异常kill掉,系统会自动重启该服务
		Notification notification = new Notification();
		notification.flags = Notification.FLAG_ONGOING_EVENT;
		notification.flags |= Notification.FLAG_NO_CLEAR;
		notification.flags |= Notification.FLAG_FOREGROUND_SERVICE;
		this.startForeground(1, notification);
		return super.onStartCommand(intent, flags, startId);
	}
}



我用的这个方法开机启动 ,为了防止service被系统杀掉,通知栏会显示出我这个应用的通知 消除不掉


还有有的手机系统会有开机自启动的权限设置,比如我用的小米,需要进入  安全中心--》授权管理--》自启动管理,打开自己的应用


还有此方法是接受开机启动的广播,但是很多系统都屏蔽了这个广播,所以还有的思路就是用其他的广播启动,比如收到短信等等(话说 经过我的测试,如果不在手机上开启自动启动的权限 什么广播都没用,如果使用收到短信的广播还要加上收短信权限)

参考,使用mount的广播:http://www.itnose.net/detail/6178717.html

附一个广播大全~ http://blog.csdn.net/djun100/article/details/11020723


demo下载:http://s.cdz.la/file/7682096


你可能感兴趣的:(Android 应用 自启动方法)