找到了broadcast這種廣播方式,可以設定要接收的Action(像是event)
也就是當開機完成後系統會有一個事件(叫做BOOT_COMPLETED)被廣播
只要接收到這事件後用intent開activity就OK了
後來發現把service和broadcast摻再一起做撒尿牛丸好像還蠻有趣的
就順便研究囉!
方式如下:
先開新的project後(BoottestActivity)在package中new一個class
bootreceive.java:
===========================================
package diousk.com;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
public class bootreceive extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.d("Receiver","Get event : "+intent.getAction());//看接收到的是甚麼事件
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){//如果是 ACTION_BOOT_COMPLETED 事件
Intent bootActivityIntent=new Intent(context,BoottestActivity.class);
bootActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//未知flag@@
context.startActivity(bootActivityIntent);//開啟BoottestActivity
}
else{
int dataint=intent.getIntExtra("i", -1);
Log.d("Receiver","Get data : "+dataint);
}
}
public bootreceive()
{
Log.d("Receiver","receiver construtor");
}
}
===========================================
BoottestActivity.java:
===========================================
package diousk.com;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class BoottestActivity extends Activity {
Button mybtn1,mybtn2;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);//下面都和service有關,不要service的話到這即可
mybtn1=(Button)findViewById(R.id.mystart);
mybtn2=(Button)findViewById(R.id.mystop);
mybtn1.setOnClickListener(new Button.OnClickListener() //按下這個鈕會run BootqqService
{
public void onClick(View arg0)
{
startService(new Intent(BoottestActivity.this,BootqqService.class));
}
});
mybtn2.setOnClickListener(new Button.OnClickListener() //按下這個鈕會stop BootqqService
{
public void onClick(View arg0)
{
stopService(new Intent(BoottestActivity.this,BootqqService.class));
}
});
}
}
===========================================
BootqqService.java
===========================================
package diousk.com;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.util.Log;
public class BootqqService extends Service{
boolean isStop=false;
BroadcastReceiver br;
@Override
public IBinder onBind(Intent arg0) {//一定要實現的method,還不知道作何用途
// TODO Auto-generated method stub
Log.d("qqService","Binded!!");
return null;
}
public void onCreate(){
Log.i("qqService","Services onCreate");
super.onCreate();
br=new bootreceive();//註冊一個自己定義的事件叫做diouskevent.mmn, 如果有人廣播的話就可以被接收到了
IntentFilter intfilter=new IntentFilter();
intfilter.addAction("diouskevent.mmn");
registerReceiver(br,intfilter);
}
public void onStart(Intent intent,int startId){
Log.i("qqService","Services onStart");
super.onStart(intent, startId);
new Thread(){//跑一個thread每一秒送一個diouskevent.mmn的廣播
public void run(){
int i=0;
while(!isStop){
Log.i("qqService","Services send integer");
Intent intent=new Intent();
intent.putExtra("i", i);
i++;
intent.setAction("diouskevent.mmn");
sendBroadcast(intent);
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}.start();
}
@Override
public void onDestroy() {
Log.i("qqService","Services onDestory");
isStop=true;
super.onDestroy();
}
}
===========================================
AndroidManifest.xml(要註冊service和receiver以及接收BOOT_COMPLETED的權限)
===========================================
===========================================
That's it.


沒有留言:
張貼留言