Android实现电蚊香/Service服务管理类

来源:互联网 发布:java join的用法 编辑:程序博客网 时间:2024/04/27 21:35

实现这个实例需要的就是Service这个类的管理,我们用到的是启动Service,并在退出应用程序的时候关闭(Stop)Service,下面我们首先看下这个程序的运行截图:


图中显示的控件一个是ImageView,另一个是ImageButton,我们点击ImageButton之后可以控制程序的运行和关闭,这里我们看到的是关闭的状态。

当我们点击ImageButton之后,程序开始运行,并且在通知栏有相应的显示。

下面给出实现的截图:



下面给出实现的代码:

1.Service类

package irdc.ex10_08;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.app.Service;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.media.MediaPlayer;import android.os.IBinder;/* 自定义MyService继承Service */public class MyService extends Service{  private String MY_PREFS = "MosPre";  private NotificationManager notiManager;  private int mosStatus;  private int notiId=99;  private MediaPlayer myPlayer;      @Override  public void onCreate()  {    try    {      /* 取得NotificationManager */      notiManager=        (NotificationManager)getSystemService(NOTIFICATION_SERVICE);      /* Create MediaPlayer */      myPlayer=new MediaPlayer();      myPlayer = MediaPlayer.create(MyService.this, R.raw.killmosall);            /* 读取防蚊服务状态(1:启动,0:关闭) */      SharedPreferences pres =         getSharedPreferences(MY_PREFS,Context.MODE_PRIVATE);      if(pres !=null)      {        mosStatus = pres.getInt("status", 0);      }              if(mosStatus==1)      {        /* 加一个Notification */        setNoti(R.drawable.antimos,notiId,"防蚊服务启动");             /* 播放防蚊铃声 */        if(!myPlayer.isPlaying())        {          myPlayer.seekTo(0);          myPlayer.setLooping(true);          myPlayer.start();        }      }      else if(mosStatus==0)      {        /* 删除Notification */        deleteNoti(notiId);        /* 关闭防蚊铃声 */        if(myPlayer.isPlaying())        {          myPlayer.setLooping(false);          myPlayer.pause();        }      }    }    catch (Exception e)    {      e.printStackTrace();    }    super.onCreate();  }    @Override  public void onDestroy()  {    try    {      /* Service关闭时释放MediaPlayer,       * 并删除Notification */      myPlayer.release();      deleteNoti(notiId);    }    catch(Exception e)    {      e.printStackTrace();    }    super.onDestroy();  }    /* 新增Notification的method */  public void setNoti(int iconImg,int iconId,String icontext)  {    /* 建立点选Notification留言条时,会执行的Activity */    Intent notifyIntent=new Intent(this,EX10_08.class);      notifyIntent.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK);    /* 建立PendingIntent当为设定递延执行的Activity */     PendingIntent appIntent=PendingIntent.getActivity(this,0,notifyIntent,0);     /* 建立Notification,并设定相关参数 */     Notification myNoti=new Notification();    /* 设定status bar显示的icon */    myNoti.icon=iconImg;    /* 设定notification发生时她时发叨预设声音 */    myNoti.defaults=Notification.DEFAULT_SOUND;    myNoti.setLatestEventInfo(this,"防蚊服务启动",icontext,appIntent);    /* 送出Notification */    notiManager.notify(iconId,myNoti);  }     /* 删除Notification的method */  public void deleteNoti(int iconId)  {    notiManager.cancel(iconId);  }    @Override  public IBinder onBind(Intent arg0)  {    return null;  }}

2.主程序类

package irdc.ex10_08;import android.app.Activity;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.ImageButton;import android.widget.ImageView;import android.widget.Toast;public class EX10_08 extends Activity{  public static final String MY_PREFS = "MosPre";  private ImageButton button01;  private ImageView image01;  private int mosStatus;    /** Called when the activity is first created. */  @Override  public void onCreate(Bundle savedInstanceState)  {    super.onCreate(savedInstanceState);    /* 加载main.xml Layout */    setContentView(R.layout.main);        /* 取得保存在SharedPreferences的防蚊状态 */    SharedPreferences pres =       getSharedPreferences(MY_PREFS,Context.MODE_PRIVATE);    if(pres !=null)    {      mosStatus = pres.getInt("status", 0);    }        image01 = (ImageView)findViewById(R.id.image01);    button01 = (ImageButton)findViewById(R.id.button01);        /*检查mosStatus是否启动状态(1) */    if (mosStatus==1)    {      /* 设置启动图案 */      image01.setImageResource(R.drawable.mos_open);      button01.setBackgroundResource(R.drawable.power_on);    }    else    {      /* 设置关闭图案 */      image01.setImageResource(R.drawable.mos_close);      button01.setBackgroundResource(R.drawable.power_off);    }        button01.setOnClickListener(new Button.OnClickListener()    {      @Override      public void onClick(View v)      {        if (mosStatus==1)        {          SharedPreferences pres =             getSharedPreferences(MY_PREFS,Context.MODE_PRIVATE);          if(pres!=null)          {            /* 设定状态为关闭(0) */            mosStatus=0;            SharedPreferences.Editor ed = pres.edit();             ed.putInt("status",mosStatus);             ed.commit();          }          /* 设定关闭图案 */          image01.setImageResource(R.drawable.mos_close);          button01.setBackgroundResource(R.drawable.power_off);          /* 终止service */          stopMyService(1);        }        else if(mosStatus==0)        {          SharedPreferences pres =             getSharedPreferences(MY_PREFS,Context.MODE_PRIVATE);          if(pres!=null)          {            /* 设定状态为启动(1) */            mosStatus=1;            SharedPreferences.Editor ed = pres.edit();             ed.putInt("status",mosStatus);             ed.commit();          }          /*设定启动图案*/          image01.setImageResource(R.drawable.mos_open);          button01.setBackgroundResource(R.drawable.power_on);          /* 启动service */          startMyService();        }        else        {          Toast.makeText(EX10_08.this,"系统错误",Toast.LENGTH_LONG)            .show();        }        }    });  }    @Override  public boolean onCreateOptionsMenu(Menu menu)  {        /* 叵丈离开的menu */    menu.add(0,1,1,"").setIcon(R.drawable.menu_exit);     return super.onCreateOptionsMenu(menu);  }    @Override  public boolean onOptionsItemSelected(MenuItem item)  {    switch(item.getItemId())    {      case (1):        /* 离开前ALERT提醒 */        new AlertDialog.Builder(EX10_08.this)        .setTitle("Message")        .setMessage("确定要离开吗?")        .setPositiveButton("确定",          new DialogInterface.OnClickListener()          {            public void onClick(DialogInterface dialoginterface,int i)            {                         finish();            }          }        ).setNegativeButton("取消", new DialogInterface.OnClickListener()        {          public void onClick(DialogInterface dialoginterface, int i)             {          }        }).show();        break;    }    return super.onOptionsItemSelected(item);  }    public void startMyService()  {    try    {      /* 先终止之前可能还在运行的service */      stopMyService(0);      /* 启动MyService */      Intent intent = new Intent( EX10_08.this, MyService.class);       intent.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK );       startService(intent);      Toast.makeText(EX10_08.this,getResources().getString(R.string.start),                     Toast.LENGTH_LONG).show();    }    catch(Exception e)    {      e.printStackTrace();    }  }    public void stopMyService(int flag)  {    try    {      /* 停止MyService */      Intent intent = new Intent( EX10_08.this, MyService.class );      stopService(intent);      if(flag==1)      {        Toast.makeText(EX10_08.this,getResources().getString(R.string.stop),                       Toast.LENGTH_LONG).show();      }    }    catch(Exception e)    {      e.printStackTrace();    }  }}

3.Service的注册

 <service      android:name=".MyService"      android:exported="true"       android:process=":remote"    />

4.布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:orientation="vertical"  android:background="@drawable/white"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:gravity="center_horizontal">  <ImageView    android:id="@+id/image01"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:paddingTop="30dip"  />  <ImageButton    android:id="@+id/button01"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_marginTop="20dip"  /></LinearLayout>


原创粉丝点击