2014-12-23 4 views
0

나는 떨리는 것을 감지하여 경고 대화 상자를 생성하는 안드로이드 응용 프로그램을 개발 중입니다. 나는 우리가 전화를 흔들 때마다 응용 프로그램이 자동으로 대화 상자를 경고 할 수 있도록 백그라운드에서 해당 응용 프로그램을 실행하고 싶습니다.서비스 또는 방송 수신기

나는 떨리는 모듈을 어디에 두어야하는지에 관한 문제에 직면하고있다.

은 내가 StartCammand()에 해당 모듈을 넣어 가지고 있지만

는 브로드 캐스트 리시버를 사용하여 내 응용 프로그램을 구현하는 것이 가능 .. 일을 didnot?

도와주세요 .. 미리 감사드립니다. 여기

여기

public void onShake(float force) { 
     // TODO Auto-generated method stub 
     AlertDialog.Builder alertDialog=new AlertDialog.Builder(Shake.this); 
     alertDialog.setTitle("Confirm your condition"); 
     alertDialog.setMessage("Are you OK?"); 
     alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface arg0, int arg1) { 
       // TODO Auto-generated method stub 
       Toast.makeText(getApplicationContext(),"Take Care!!!", Toast.LENGTH_LONG).show(); 

      } 
     }); 
     alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface arg0, int arg1) { 
       // TODO Auto-generated method stub 
       Toast.makeText(getApplicationContext(), "Emergency will be reached", Toast.LENGTH_LONG).show(); 

      } 
     }); 
     alertDialog.show(); 

    } 

내가 StartCommand()이 텍스트 책처럼 소리

public int onStartCommand(Intent intent, int flags, int startid) { 
      SensorEventListener sensorEventListener = new SensorEventListener(){ 
      private long now=0; 
      private long timeDiff=0; 
      private long lastUpdate=0; 
      private long lastShake=0; 
      private float x=0; 
      private float y=0; 
      private float z=0; 
      private float lastX=0; 
      private float lastY=0; 
      private float lastZ=0; 
      private float force=0; 
      public void onAccuracyChanged(Sensor sensor,int accuracy){} 
      public void onSensorChanged(SensorEvent event) 
      { 
       now=event.timestamp; 
       x=event.values[0]; 
       y=event.values[1]; 
       z=event.values[2]; 
       if(lastUpdate==0) 
       { 
        lastUpdate=now; 
        lastShake=now; 
        lastX=x; 
        lastY=y; 
        lastZ=z; 
        Toast.makeText(aContext, "No motion is detected", Toast.LENGTH_LONG).show(); 
       } 
       else 
       { 
        timeDiff=now-lastUpdate; 
        if(timeDiff>0) 
        { 
         force=Math.abs(x+y+z-lastX-lastY-lastZ); 
         if(Float.compare(force, threshold)>0) 
         { 
          if(now-lastShake>=interval) 
          { 
           listener.onShake(force); 
          } 
          else 
          { 
           Toast.makeText(aContext, "no motion is detected", Toast.LENGTH_LONG).show(); 
          } 
          lastShake=now; 
         } 
         lastX=x; 
         lastY=y; 
         lastZ=z; 
         lastUpdate=now; 
        } 
        else 
        { 
         Toast.makeText(aContext, "no motion is detected", Toast.LENGTH_LONG).show(); 
        } 
       } 
       listener.onAccelerometerChanged(x,y,z); 
      } 

     }; 
     return START_STICKY; 
    } 
+0

언제 서비스에서 Context.startService()를 호출합니까? –

+0

@ NathanielD.WaggonerI MainActivity 클래스에서이 클래스를 호출하여 Intent를 전달하여 서비스를 확장하는 활동으로 전달합니다. – krati

+0

답변보기. 설정 한 청취자를 등록하지 않았습니다. –

답변

0

에 동요의 코드를 삽입 한 동요 감지에 경고 대화 상자를 생성합니다 모듈 서비스의 예.

왜?

1) 백그라운드에서 실행하고 싶습니다. 2) 아마도 사용자가 앱을 떠난 경우에도 계속 실행되기를 원할 것입니다.

이 경우에 리스너를 등록하지 않을 것 나에게 보이는

http://developer.android.com/reference/android/app/Service.html

... 참조 : 특히

http://developer.android.com/guide/topics/sensors/sensors_overview.html#sensors-monitor

: 대신

@Override 
    protected void onResume() { 
    super.onResume(); 
    mSensorManager.registerListener(this, mLight, SensorManager.SENSOR_DELAY_NORMAL); 
    } 

    @Override 
    protected void onPause() { 
    super.onPause(); 
    mSensorManager.unregisterListener(this); 
    } 

당신이 만약 관련 레지스터/등록 취소 전화를 서비스의 적절한 위치로 이동 시키십시오.

센서 유형 등을 적절하게 설정할 수 있습니다.

그러나 서비스를 사용하면 대화 상자의 표시가 복잡해지며 사용 방법에 대한 최종 결정을 내리기 전에 특정 사용 사례에 대한 자세한 정보를 제공 할 수 있습니다.

+0

SensorListener ..에 등록했습니다. 백그라운드에서 실행하지 않고이 응용 프로그램을 실행하면 제대로 작동하지만 백그라운드에서 실행하려면 실행하지 않았습니다. 서비스로 확장했지만 작동하지 않았습니다. – krati

+0

등록은이 코드에 포함되어 있지 않습니다. –

관련 문제