Android 实现开机自启动 Service
16lz
2021-01-23
首先做一个监听器:
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>
注册权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
更多相关文章
- Android 运行时权限
- 如何获取android root 启动权限
- Android权限问题整理
- Android权限列表permission说明 [轉載]
- Android P签名机制和系统权限
- android 判断sdcard是否存在,以及写入权限