---------------------------------------------------------------------------

转载:http://blog.csdn.net/arui319

---------------------------------------------------------------------------

如何做到开机启动?

只要实现一个BroadcastReceiver,监听手机启动完成的事件ACTION_BOOT_COMPLETED即可。需要注意的是,好像不能用模拟器,要用手机测试。

那如何做到启动一个Service,并且在用户关闭后能自动又启动了呢?

一般的,都会在上面说到的BroadcastReceiver的实现里面,监听手机启动完成后,启动一个Service,这是一般的做法。问题是,用户可以关闭掉该Service。那么怎样才能使它被关闭掉以后,再次启动呢?聪明的你一定立即就想到了,如果不直接启动Service,而是启动一个timmer,或者alarmManager,然后每隔一段时间去启动Service,就可以了。

package com.arui.framework.android.daemonservice;    import android.app.AlarmManager;  import android.app.PendingIntent;  import android.content.BroadcastReceiver;  import android.content.Context;  import android.content.Intent;  import android.os.SystemClock;    public class BootBroadcast extends BroadcastReceiver {        @Override      public void onReceive(Context context, Intent mintent) {            if (Intent.ACTION_BOOT_COMPLETED.equals(mintent.getAction())) {              // 启动完成              Intent intent = new Intent(context, Alarmreceiver.class);              intent.setAction("arui.alarm.action");              PendingIntent sender = PendingIntent.getBroadcast(context, 0,                      intent, 0);              long firstime = SystemClock.elapsedRealtime();              AlarmManager am = (AlarmManager) context                      .getSystemService(Context.ALARM_SERVICE);                // 10秒一个周期,不停的发送广播              am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime,                      10 * 1000, sender);          }        }  } 

package com.arui.framework.android.daemonservice;    import android.content.BroadcastReceiver;  import android.content.Context;  import android.content.Intent;    public class Alarmreceiver extends BroadcastReceiver {      @Override      public void onReceive(Context context, Intent intent) {            if (intent.getAction().equals("arui.alarm.action")) {              Intent i = new Intent();              i.setClass(context, DaemonService.class);              // 启动service               // 多次调用startService并不会启动多个service 而是会多次调用onStart              context.startService(i);          }      }  } 
    package com.arui.framework.android.daemonservice;            import android.app.Service;      import android.content.Intent;      import android.os.IBinder;      import android.util.Log;            public class DaemonService extends Service {                @Override          public IBinder onBind(Intent intent) {              return null;          }                @Override          public void onCreate() {              super.onCreate();              Log.v("=========", "***** DaemonService *****: onCreate");          }                @Override          public void onStart(Intent intent, int startId) {              Log.v("=========", "***** DaemonService *****: onStart");              // 这里可以做Service该做的事          }      }  

    <receiver           android:name=" com.arui.framework.android.daemonservice.BootBroadcast"          android:permission="android.permission.RECEIVE_BOOT_COMPLETED">          <intent-filter>              <action android:name="android.intent.action.BOOT_COMPLETED" />          </intent-filter>      </receiver>      <receiver           android:name=" com.arui.framework.android.daemonservice.Alarmreceiver" >          <intent-filter>              <action android:name="arui.alarm.action" />          </intent-filter>      </receiver>            <service                android:name=" com.arui.framework.android.daemonservice.DaemonService" >            </service>  




更多相关文章

  1. 【Android】抽屉控件 SlidingDrawer 的简单示例
  2. android监听短信并判断是否未读
  3. Android(安卓)开发之webview页面返回到最顶关闭
  4. android监听短信并判断是否未读
  5. Android(安卓)PhoneStateListener 问题
  6. [Android] 监听系统网络连接打开或者关闭的消息
  7. [Android]开启/关闭/监听 飞行模式
  8. Android(安卓)PhoneStateListener 问题
  9. Android(安卓)中三种使用线程的方法

随机推荐

  1. Android:30分钟弄明白Touch事件分发机制
  2. AndroidX的迁移
  3. Android Studio使用gradle编译问题
  4. android的进程间通信aidl
  5. 解决 eclipse移植androidstudio Could no
  6. android数据库操作:根据过滤条件获取部分
  7. android HttpURLConnection
  8. ProgressBar控件的使用(Android设置条形,环
  9. android----TextView如何实现无限滚动显
  10. 简单方便快捷的Android引导页 高亮 浮层(c