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();
                }
           }
       }
    }    
  • 相关阅读:
    BZOJ3105-新Nim游戏
    POJ2947-Widget Factory
    POJ2248-Addition Chains
    POJ1964-City Game
    POJ2823-Sliding Window
    关于upx壳的一点认知,以及upx壳的特征识别
    易语言人脸识别算法源码
    易语言websocket客户端纯源码(无模块)
    易语言雷电模拟器批量虚拟定位源码
    易语言修改外部任意窗口标题图标源码
  • 原文地址:https://www.cnblogs.com/cslunatic/p/5634872.html
Copyright © 2011-2022 走看看