700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android实现电蚊香/Service服务管理类

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

时间:2024-05-19 03:36:44

相关推荐

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

实现这个实例需要的就是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;@Overridepublic 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();}@Overridepublic 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);}@Overridepublic 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. */@Overridepublic 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(){@Overridepublic 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); mit();}/* 设定关闭图案 */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); mit();}/*设定启动图案*/image01.setImageResource(R.drawable.mos_open);button01.setBackgroundResource(R.drawable.power_on);/* 启动service */startMyService();}else{Toast.makeText(EX10_08.this,"系统错误",Toast.LENGTH_LONG).show();} }});}@Overridepublic boolean onCreateOptionsMenu(Menu menu){ /* 叵丈离开的menu */menu.add(0,1,1,"").setIcon(R.drawable.menu_exit); return super.onCreateOptionsMenu(menu);}@Overridepublic 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的注册

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

4.布局文件

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。