项目总结(一) 手机清空后台后,依旧可以接收到推送的解决方案
2015-11-25 23:31
281 查看
public class AutoStartReceiver
extends BroadcastReceiver{
@Override
public void onReceive(Contextcontext, Intent intent) {
if (!AutoStarterService.isStart) {
Log.d(TAG,
"@onReceiveNewsPushService will start");
context.startService(new Intent(context, AutoStarterService.class));
}
}
}
public class AutoStarterService
extends Service {
private static final String
TAG = "AutoStarterService";
public static boolean isStart
=false;
@Override
public IBinderonBind(Intent intent) {
return null;
}
@Override
public void onCreate(){
Log.d(TAG,
"AutoStarterServiceonCreate");
isStart =true;
init();
super.onCreate();
}
@Override
public int onStartCommand(Intentintent,
int flags, int
startId) {
Log.d(TAG,
"AutoStarterServiceonStartCommand");
if (!isStart) {
Log.d("AutoStarterService",
"AutoStarterService onStartCommand ==>!isStart");
init();
}
return super.onStartCommand(intent,flags, startId);
}
@Override
public void onDestroy(){
isStart =false;
// 添加自启动功能
startAutoAlarm();
super.onDestroy();
}
private void init(){
//这块可以判断talk是否连接成功,然后如果没有,就启动下talk的服务
}
// 开启自启动闹钟
private void startAutoAlarm() {
//操作:发送一个广播,
启动AutoStarter
Intent intent = new Intent(AutoStarterService.this, AutoStarterReceiver.class);
intent.setAction("com.android.receiver.ACTION_AUTOSTARTER");
PendingIntent autoStart =PendingIntent.getBroadcast(AutoStarterService.this,
0, intent, 0);
//设定一个五秒后的时间
Calendar calendar=Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND,
30);
AlarmManager alarmManager =(AlarmManager) CApplication.getInstance().getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), autoStart);
}
//开启轮询服务
public static void startPollingService(Context context,
int seconds) {
Intent intent = new Intent(context, AutoStarterReceiver.class);
intent.setAction("com.android.receiver.ACTION_AUTOSTARTER");
PendingIntent pendingIntent =PendingIntent.getBroadcast(context,
0, intent, 0);
AlarmManager manager =(AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
//使用AlarmManger的setRepeating方法设置定期执行的时间间隔(seconds秒)和需要执行的Service
manager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),seconds *
1000, pendingIntent);
}
}
//这句话表示每两分钟发送广播com.android.receiver.ACTION_AUTOSTARTER
接收者是AutoStarterReceiver
AutoStarterService.startPollingService(this,
2 * 60);
下面是放在androidmanifest里面的
接收广播android.net.conn.CONNECTIVITY_CHANGE网络变化,
com.android.receiver.ACTION_AUTOSTARTER这是自己的
android.intent.action.USER_PRESENT
这是解锁的
<receiver
android:name="com.android.receiver.AutoStarterReceiver"
>
<intent-filter>
<action
android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
<action
android:name="com.android.receiver.ACTION_AUTOSTARTER"/>
<action
android:name="android.intent.action.USER_PRESENT"/>
</intent-filter>
</receiver>
<service
android:name="com.android.receiver.AutoStarterService"
android:exported="true"
>
</service>
extends BroadcastReceiver{
@Override
public void onReceive(Contextcontext, Intent intent) {
if (!AutoStarterService.isStart) {
Log.d(TAG,
"@onReceiveNewsPushService will start");
context.startService(new Intent(context, AutoStarterService.class));
}
}
}
public class AutoStarterService
extends Service {
private static final String
TAG = "AutoStarterService";
public static boolean isStart
=false;
@Override
public IBinderonBind(Intent intent) {
return null;
}
@Override
public void onCreate(){
Log.d(TAG,
"AutoStarterServiceonCreate");
isStart =true;
init();
super.onCreate();
}
@Override
public int onStartCommand(Intentintent,
int flags, int
startId) {
Log.d(TAG,
"AutoStarterServiceonStartCommand");
if (!isStart) {
Log.d("AutoStarterService",
"AutoStarterService onStartCommand ==>!isStart");
init();
}
return super.onStartCommand(intent,flags, startId);
}
@Override
public void onDestroy(){
isStart =false;
// 添加自启动功能
startAutoAlarm();
super.onDestroy();
}
private void init(){
//这块可以判断talk是否连接成功,然后如果没有,就启动下talk的服务
}
// 开启自启动闹钟
private void startAutoAlarm() {
//操作:发送一个广播,
启动AutoStarter
Intent intent = new Intent(AutoStarterService.this, AutoStarterReceiver.class);
intent.setAction("com.android.receiver.ACTION_AUTOSTARTER");
PendingIntent autoStart =PendingIntent.getBroadcast(AutoStarterService.this,
0, intent, 0);
//设定一个五秒后的时间
Calendar calendar=Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND,
30);
AlarmManager alarmManager =(AlarmManager) CApplication.getInstance().getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), autoStart);
}
//开启轮询服务
public static void startPollingService(Context context,
int seconds) {
Intent intent = new Intent(context, AutoStarterReceiver.class);
intent.setAction("com.android.receiver.ACTION_AUTOSTARTER");
PendingIntent pendingIntent =PendingIntent.getBroadcast(context,
0, intent, 0);
AlarmManager manager =(AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
//使用AlarmManger的setRepeating方法设置定期执行的时间间隔(seconds秒)和需要执行的Service
manager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),seconds *
1000, pendingIntent);
}
}
//这句话表示每两分钟发送广播com.android.receiver.ACTION_AUTOSTARTER
接收者是AutoStarterReceiver
AutoStarterService.startPollingService(this,
2 * 60);
下面是放在androidmanifest里面的
接收广播android.net.conn.CONNECTIVITY_CHANGE网络变化,
com.android.receiver.ACTION_AUTOSTARTER这是自己的
android.intent.action.USER_PRESENT
这是解锁的
<receiver
android:name="com.android.receiver.AutoStarterReceiver"
>
<intent-filter>
<action
android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
<action
android:name="com.android.receiver.ACTION_AUTOSTARTER"/>
<action
android:name="android.intent.action.USER_PRESENT"/>
</intent-filter>
</receiver>
<service
android:name="com.android.receiver.AutoStarterService"
android:exported="true"
>
</service>
相关文章推荐
- MapReduce编程实例之自定义排序
- Lua学习笔记(1) : 第一个Lua程序 - Lua与C++混合编程
- IOS UIToolbar
- 1.显示和隐藏ActionBar
- 磁盘检验[转自vbird]
- 【C#】匿名方法的终结者——Lambda表达式
- 是什么限制了你的能力和收入
- 我的博客园博客
- C/C++ 笔试、面试题目大汇总2
- 体验极速Android SDK的更新与下载
- Linux 静态IP配置
- leetcode之Plus One
- 山东理工ACM 2554
- 喝汽水问题
- 浅拷贝 深拷贝 碎片zone
- Java多态的使用注意事项
- 对象数组
- 9.19--9.27
- 轮播图jquery
- JS面向对象(智能社面向对象知识点总结)