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

android 开机自启动程序2

2012-04-01 17:27 381 查看
如果您在开发一个需要实时更新数据的应用程序,当有新的数据的时候提醒用户查看新的数据,那么您需要在后台开起一个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打开
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: