zoukankan      html  css  js  c++  java
  • Android使用bindService启动服务

    1.Service

    package com.example.ebobo;
    
    import java.util.Timer;
    
    import java.util.TimerTask;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    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.os.Handler;
    import android.os.IBinder;
    import android.os.Message;
    import android.util.Log;
    import android.os.Binder;
    
    public class timer_push extends Service {
    
        private NotificationManager manager;
        private Notification myNotify;
        private Context context;
        private PendingIntent contentIntent;
        private CharSequence contentTitle;
        private CharSequence contentText;
           
        private Timer mTimer = null;  
        private TimerTask mTimerTask = null;  
         
        private final IBinder binder = new MyBinder();
        
        @Override
        public IBinder onBind(Intent intent) {
            return binder;
        }
    
        public class MyBinder extends Binder {
            timer_push getService() {
                return timer_push.this;
            }
        }
        
        @Override
        public boolean onUnbind(Intent intent) {
            // 当调用者退出(即使没有调用unbindService)或者主动停止服务时会调用
            System.out.println("调用者退出了");
            return super.onUnbind(intent);
        }
        
        @Override
        public void onCreate()
        {
            super.onCreate();
            Log.i("push_service", "push_service onCreate");
            
            manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);  
            int icon = R.drawable.button_login; //通知图标
            CharSequence tickerText = "Hello"; //状态栏显示的通知文本提示
            long when = System.currentTimeMillis(); //通知产生的时间,会在通知信息里显示
            myNotify = new Notification(icon,tickerText,when);  
            myNotify.defaults = Notification.DEFAULT_VIBRATE; 
            
            context = getApplicationContext(); //上下文
            contentTitle = "定时按摩"; //通知栏标题
            Intent notificationIntent = new Intent(getApplicationContext(), ScanActivity.class); //点击该通知后要跳转的Activity
            contentIntent = PendingIntent.getActivity(getApplicationContext(), 0, notificationIntent, 0);    
        }
        
        @SuppressWarnings("deprecation")
        @Override
        public void onStart(Intent intent,int startId)
        {
            super.onStart(intent, startId);
            Log.i("push_service", "push_service start");            
        }
        
        @Override
        public void onDestroy()
        {
            stopMyTimer();
            manager.cancel(2);
            super.onDestroy();
            Log.i("push_service", "push_service destroy");
        }
        
        @SuppressLint("HandlerLeak")
        private Handler handler = new Handler(){
            public void handleMessage(Message msg) {
                switch (msg.what) {
                case 123:
                    contentText = "请注意大保健!"; //通知栏内容
                    myNotify.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
                    manager.notify(2, myNotify);  
                    //如果想要更新一个通知,只需要在设置好notification之后,再次调用 setLatestEventInfo(),然后重新发送一次通知即可,即再次调用notify()。
                    break;
                
                default:
                    break;
                }
            }
        };
        
        public  void startMyTimer(){  
            if (mTimer == null) {  
                mTimer = new Timer();  
            }  
      
            if (mTimerTask == null) {  
                mTimerTask = new TimerTask() {  
                    @Override  
                    public void run() {  
                        do {  
                           try { 
                               Log.i("push_service", "222222222222222222222222222222222222222y");
                                Message message = new Message();
                                message.what = 123;
                                handler.sendMessage(message);
                            } 
                            catch (IllegalStateException e) {  
                            }     
                        } while (false);  
                    }  
                };  
            }  
      
            if(mTimer != null && mTimerTask != null )  
                mTimer.schedule(mTimerTask, 0, 10000);  
        }  
          
        public  void stopMyTimer(){  
              
            if (mTimer != null) {  
                mTimer.cancel();  
                mTimer = null;  
            }  
      
            if (mTimerTask != null) {  
                mTimerTask.cancel();  
                mTimerTask = null;  
            }     
        }  
    }

    2 activity1

    public class LoginActivity extends Activity implements OnClickListener, OnCheckedChangeListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); Intent intent = new Intent(this, timer_push.class); bindService(intent, connection, Context.BIND_AUTO_CREATE); init(); }
    private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { myService = null; } @Override public void onServiceConnected(ComponentName name, IBinder service) { myService = ((timer_push.MyBinder) service).getService(); System.out.println("Service连接成功"); // 执行Service内部自己的方法 myService.startMyTimer(); } }; }

    3.actvity2

    public class WaterActivity extends Activity implements OnClickListener, OnSeekBarChangeListener {
            @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_mian_water);
    
            init();
            
            model = 0;
            
            Intent sintent = new Intent(this, timer_push.class);  
            bindService(sintent, connection, Context.BIND_AUTO_CREATE); 
        }
    
            private ServiceConnection connection = new ServiceConnection() {
    
            @Override
            public void onServiceDisconnected(ComponentName name) {
                myService = null;
            }
    
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                myService = ((timer_push.MyBinder) service).getService();
                System.out.println("Service连接成功");
            }
        };
    
        public void onClick(View v) {
          switch (v.getId()) {
          case R.id.btn_wf_start:
                index = 3;
                if(btnStart.getText().toString().equals(getResources().getString(R.string.start))){
                    btnStart.setText(getResources().getString(R.string.stop));
                    startMyTimer();
                    
                    getflag = 1;
                    
                    final ProgressDialog proDia=ProgressDialog.show(WaterActivity.this,"",
                                                                    "正在启动设备,请稍后...",true,false);// 执行Service内部自己的方法
                    myService.stopMyTimer();
                } else {// 执行Service内部自己的方法
                    myService.startMyTimer();
                }
           }
       }
    }    
  • 相关阅读:
    PATA 1071 Speech Patterns.
    PATA 1027 Colors In Mars
    PATB 1038. 统计同成绩学生(20)
    1036. 跟奥巴马一起编程(15)
    PATA 1036. Boys vs Girls (25)
    PATA 1006. Sign In and Sign Out (25)
    读取web工程目录之外的图片并显示
    DOS命令
    java连接oracle集群
    servlet
  • 原文地址:https://www.cnblogs.com/cslunatic/p/5634872.html
Copyright © 2011-2022 走看看