android 开机自启动程序2
来源:互联网 发布:知乎的海贼 王路飞 编辑:程序博客网 时间:2024/06/05 19:35
如果您在开发一个需要实时更新数据的应用程序,当有新的数据的时候提醒用户查看新的数据,那么您需要在后台开起一个Service,然后实时的去网络上获取数据,但是如果用户关机重启,您的Service可能就消失了!那么怎么样保证开机后你的Service还活跃的在用户的手机里偷偷的从网络上获取数据呢?
很简单,我们只要实现开机自启动即可,Android实现开机自启动可能是移动操作系统中最简单的了,我们只需要监听一个开机启动的Broadcast(广播)即可。首先写一个Receiver(即广播监听器),继承BroadcastReceiver,如下所示:
android开机启动service,适合闹钟程序 实例中一共三个类
1.public class YourReceiver extends BroadcastReceiver
2.public class ServiceTest extends Service
3.public class ShowActivity extends Activity
1.yourReceiver类:
[java] view plaincopyprint?
- package radar.com;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- public class YourReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- Intent i = new Intent(context, ServiceTest.class);
- i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startService(i);
- }
- }
2.复制代码ServiceTest类:
[java] view plaincopyprint?
- package radar.com;
- import java.util.Calendar;
- import android.app.Service;
- import android.content.Intent;
- import android.os.Handler;
- import android.os.IBinder;
- import android.util.Log;
- public class ServiceTest extends Service{
- Handler hd1=new Handler();
- /**启动activity的开关*/
- boolean b;
- /**启动一次activity之后的一分钟内将不再重新启动*/
- int time;
- public static final Intent ACTION_START = null;
- private static final String TAG = "TestService";
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
- @Override
- public boolean onUnbind(Intent i) {
- Log.e(TAG, "============> TestService.onUnbind");
- return false;
- }
- @Override
- public void onRebind(Intent i) {
- Log.e(TAG, "============> TestService.onRebind");
- }
- @Override
- public void onCreate() {
- Log.e(TAG, "============> TestService.onCreate");
- hd1.postDelayed(mTasks, delay);
- }
- @Override
- public void onStart(Intent intent, int startId) {
- Log.e(TAG, "============> TestService.onStart");
- }
- @Override
- public void onDestroy() {
- Log.e(TAG, "============> TestService.onDestroy");
- }
- public void log(){
- Calendar c= Calendar.getInstance();
- int h=c.getTime().getHours();
- int m=c.getTime().getMinutes();
- Log.i("hour", ""+h);
- Log.i("minute", ""+m);
- /**这里的16和10可以自己定义一下 主要是提醒的时间设置,我不想做的太繁琐,所有没有些闹钟,只是用这个测试一下:)*/
- if(h==16&&m==10)
- {
- /**为防止持续调用,所以用boolean 变量b做了一个小开关*/
- if(!b){
- Intent i = new Intent();
- i.setClass(ServiceTest.this, ShowActivity.class);
- i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- this.startActivity(i);
- this.stopSelf();
- b=true;
- }
- }
- /**开关开启后计时60秒,在这60秒之内就不再重新启动activity了,而60秒一过,上面的h和m条件肯定就不成立了*/
- if(b){
- time+=5;
- if(time==60){
- time=0;
- b=false;
- }
- }
- }
- /** 速度控制参数(单位豪秒) */
- private int delay = 5000;
- /**
- * 控制速度
- * */
- private Runnable mTasks = new Runnable()
- {
- public void run()
- {
- log();
- hd1.postDelayed(mTasks, delay);
- }
- };
- }
3.复制代码showActivity类:(.此类中啥都没有,就是演示一下activity可以被启动)
[java] view plaincopyprint?
- package radar.com;
- import radar.com.R;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.Window;
- import android.view.WindowManager;
- public class ShowActivity extends Activity{
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- this.requestWindowFeature(Window.FEATURE_NO_TITLE);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.main);
- }
- }
4.复制代码下面是很重要的AndroidManifest
[xhtml] view plaincopyprint?
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="radar.com"
- android:versionCode="1"
- android:versionName="1.0">
- <application
- android:icon="@drawable/icon"
- android:label="@string/app_name">
- <service
- android:name=".ServiceTest"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </service>
- <receiver android:name=".yourReceiver" >
- <intent-filter>
- <action android:name="android.intent.action.BOOT_COMPLETED" />
- <category android:name="android.intent.category.HOME"/>
- </intent-filter>
- </receiver>
- <activity android:name=".showActivity"
- android:label="@string/app_name"
- android:configChanges="orientation|keyboardHidden|navigation"
- android:screenOrientation="portrait">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- <uses-sdk android:minSdkVersion="4" />
- </manifest>
既可以作为开机启动并隐藏到后台的service,也可以当做activity打开
- android 开机自启动程序2
- android 开机自启动程序2
- Android开机自启动程序
- Android开机自启动程序
- Android 开机自启动程序
- Android开机自启动程序
- Android开机自启动程序
- Android开机自启动程序
- Android开机自启动程序
- Android开机自启动程序
- Android开机自启动程序
- Android 开机自启动程序
- Android开机自启动程序
- Android开机自启动程序
- Android开机自启动程序
- android程序开机自启动
- android 开机自启动程序1
- Android开机自启动程序 1
- 字符串提取
- svn删除项目
- linux 在文件中搜索需要的内容
- OpenCV打开和显示图像
- javascript资料
- android 开机自启动程序2
- JDK环境配置
- Oracle Flashback 技术大解密
- makefile 中 edit
- 新浪微博开发之发表微博功能的实现
- Haypi创始人任刚分享移动应用推广心得
- Android学习--Animotions动画(一)
- 帝国系统数据库端口号修改
- [ASP.NET]确保代码正确的绑定