2015-02-24 43 views
0

的Android服务这里是我的代码:不停止自我

   @Override public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 

       // Get current time in nano seconds. 
       long pressTime = System.currentTimeMillis(); 


       // If double click... 
       if (pressTime - lastPressTime <= 300) { 
        createNotification(); 
        ServiceFloating.this.stopSelf(); 
        mHasDoubleClicked = true; 
       } 
       else {  // If not double click.... 
        mHasDoubleClicked = false; 
       } 
       lastPressTime = pressTime; 
       initialX = paramsF.x; 
       initialY = paramsF.y; 
       initialTouchX = event.getRawX(); 
       initialTouchY = event.getRawY(); 
       break; 
      case MotionEvent.ACTION_UP: 
        if(event.getRawX() - initialTouchX >40) 
       { 
        paramsF.x = (int)dispwidth; 
        paramsF.y = initialY + (int) (event.getRawY() - initialTouchY); 
        ObjectAnimator animY = ObjectAnimator.ofFloat(layout, "translationX", 100f, 0f); 
        animY.setDuration(1000);//1sec 
        animY.setInterpolator(new BounceInterpolator()); 
        animY.setRepeatCount(0); 
        animY.start(); 
       } 
       else if(initialTouchX-event.getRawX()>40){ 
        paramsF.x = 0; 
        paramsF.y = initialY + (int) (event.getRawY() - initialTouchY); 
        ObjectAnimator animY = ObjectAnimator.ofFloat(layout, "translationX", -100f, 0f); 
        animY.setDuration(1000);//1sec 
        animY.setInterpolator(new BounceInterpolator()); 
        animY.setRepeatCount(0); 
        animY.start(); 
       } 
       windowManager.updateViewLayout(layout, paramsF); 
       break; 
      case MotionEvent.ACTION_MOVE: 
       paramsF.x = initialX + (int) (event.getRawX() - initialTouchX); 
       paramsF.y = initialY + (int) (event.getRawY() - initialTouchY); 
       windowManager.updateViewLayout(layout, paramsF); 
       break; 
      } 
      return false; 
     } 
    }); 
} catch (Exception e) { 
    // TODO: handle exception 
} 

这是我的onDestroy()

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (safe != null) windowManager.removeView(safe); 
} 

safeLinearLayout在我的窗口管理对象在我的OnCreate 服务启动和运行重视精细。当我点击一个按钮的调用stopService(new Intent(MainActivity.this, ServiceFloating.class));从我的主要活动,我可以停止服务,但是当我尝试从它自己的观点与Fatal signal 11 error

停止服务应用程序崩溃并重新启动我怎么能阻止它自己的服务视图?

回答

0

尝试停止服务内部的服务,例如,当您按下按钮时,从活动向服务发送消息。您需要将活动绑定到服务以便能够发送和接收消息。

我用当服务从活动收到停止消息这个方法:

stopForeground(true); 
stopSelf(); 
+0

但我不希望它从活动停止。 – user3677331 2015-02-24 20:51:26

+0

我不明白你的意思,从它自己的角度停止服务。服务没有任何布局。你想从哪里阻止它? – masana 2015-02-24 21:22:54

+0

https://play.google.com/store/apps/details?id=com.boatmob.floating.touch&hl=en这种事情正在通过服务来完成,并将视图添加到窗口管理器 – user3677331 2015-02-24 21:44:37