您的位置:首页 > 移动开发 > Android开发

Android实现开机自启动Service

2013-05-24 11:15 190 查看
首先做一个监听器:

public class StartBroadcastReceiver extends BroadcastReceiver{

    private static final String ACTION = "android.intent.action.BOOT_COMPLETED";
    public void onReceive(Context context, Intent intent) {
                    if (intent.getAction().equals(ACTION)){
                            Intent i= new Intent(Intent.ACTION_RUN);
                            i.setClass(context, TService.class);
                            context.startService(i);
                    }
            }
           
    }


然后再做一个service:

package com.testService;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
public class TService extends Service {
    /**
     * 创建Handler对象,作为进程传递postDelayed之用
     */
    private Handler objHandler = new Handler();
    private int intCounter = 0;
    private static final String TAG = "TService";
    private NotificationManager notificationManager;
    private Runnable mTasks = new Runnable() {
	    public void run() {
		    intCounter++;
		    Log.i("HIPPO", "Counter:" + Integer.toString(intCounter));
		    objHandler.postDelayed(mTasks, 1000);
	    }
    };
    public void onCreate() {
	    Log.d(TAG, "============> TService.onCreate");
	    notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
	    showNotification();
	    super.onCreate();
    }
   
    public void onStart(Intent intent, int startId) {
	    Log.i(TAG, "============> TService.onStart");
	    objHandler.postDelayed(mTasks, 1000);
	    super.onStart(intent, startId);
    }
    public IBinder onBind(Intent intent) {
	    Log.i(TAG, "============> TService.onBind");
	    return null;
    }
    public class LocalBinder extends Binder {
	    public TService getService() {
		    return TService.this;
	    }
    }
    public boolean onUnbind(Intent intent) {
	    Log.i(TAG, "============> TService.onUnbind");
	    return false;
    }
    public void onRebind(Intent intent) {
	    Log.i(TAG, "============> TService.onRebind");
    }
    public void onDestroy() {
	    Log.i(TAG, "============> TService.onDestroy");
	    notificationManager.cancel(R.string.service_start);
	    objHandler.removeCallbacks(mTasks);
	    super.onDestroy();
    }
    private void showNotification() {
	    Notification notification = new Notification(R.drawable.icon,
			    "SERVICE START", System.currentTimeMillis());
	    Intent intent = new Intent(this, testService.class);
	    intent.putExtra("FLG", 1);
	    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
			    intent, 0);
	    notification.setLatestEventInfo(this, "SERVICE", "SERVICE START",
			    contentIntent);
	    notificationManager.notify(R.string.service_start, notification);
    }
}


做一个主程序:

package com.testService;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class testService extends Activity {
   
    private Button button01;
    private Button button02;
    private int flg;
    private Intent tsIntent;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    
    setContentView(R.layout.main);
    button01 = (Button)findViewById(R.id.Button01);
    button02 = (Button)findViewById(R.id.Button02);
    
    tsIntent = this.getIntent();
    Bundle bundle = tsIntent.getExtras();
    
    if (bundle == null){
	flg = 1;
	DisplayToast(this,"Service Start",2);
	startService();
	finish();
    }else{
	    DisplayToast(this,"Service Stop",2);
	    stopService();
	    finish();
    }
    
    button01.setOnClickListener(Listener01);
    button02.setOnClickListener(Listener02);
    
}

Button.OnClickListener Listener01 = new OnClickListener(){
	    @Override
	    public void onClick(View v) {
		    // TODO Auto-generated method stub
		    startService();
	    }
       
};

Button.OnClickListener Listener02 = new OnClickListener(){
	    @Override
	    public void onClick(View v) {
		    // TODO Auto-generated method stub
		    stopService();
	    }
       
};

    private void startService() {
	    Intent i = new Intent(testService.this, TService.class);
	    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	    this.startService(i);
    }

    private void stopService() {
	    Intent i = new Intent(testService.this, TService.class);
	    this.stopService(i);
    }
    public static void DisplayToast(Context context , String str , int time){
	    if (time == 1){
		    //短时间显示Toast
		    Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
	    }else if (time == 2){
		    //长时间显示Toast
		    Toast.makeText(context, str, Toast.LENGTH_LONG).show();
	    }
    }
}


后在androidmenfest.xml中注册一下接受广播器和服务以及开通权限:

接收广播器:

<receiver android:name=".StartBroadcastReceiver">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED"/>
                </intent-filter>
            </receiver>


服务:

<service android:name=".TService"
                android:label="TService"
                android:icon="@drawable/icon"
                android:enabled="true"
                android:exported="true"
                android:process=":remote">
            </service>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: