2012-09-25 6 views
0

사용자가 전화를 흔들 수있게 해주는 코드 덩어리에서 작업 중이며 흔들림의 활동을 표시하거나 시작합니다. 나는 장치를 흔들면 코드가 실행되지 않는 이유를 알아 내려고하고있다. 그러나이 코드를 서비스 외부에서 실행하면 완벽하게 실행됩니다.서비스 의도가 시작되지 않음 - 오류 또는 프로그램이 중지되지 않음

참고 : 서비스가 시작되고 확인했습니다. 시작할 클래스가 내 매니페스트에 있습니다. 다시 확인했습니다. 오류가 없으며 코드가 실행될 때 코드가 중지되거나 실패하지 않습니다. 그것은 단지 내가 말한 것을하지 않습니다. 예, 모든 적절한 사용 권한이 설정됩니다.

그래서 여기에 코드입니다 : 제시 할 로그 캣이 없기 때문에

import android.app.Service; 
import android.content.Context; 
import android.content.Intent; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.widget.Toast; 

public class GMeter extends Service implements SensorEventListener { 

private float mLastX, mLastY, mLastZ; 
private boolean mInitialized; 
private SensorManager mSensorManager; 
private Sensor mAccelerometer; 
private final float NOISE = (float) 2.0; 

/** Called when the activity is first created. */ 
public void onCreate(Bundle savedInstanceState) { 
    mInitialized = false; 
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    mSensorManager.registerListener(this, mAccelerometer , SensorManager.SENSOR_DELAY_NORMAL); 
    Toast.makeText(this, "Starting Service", Toast.LENGTH_LONG).show(); 
} 

protected void onResume() { 
    mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); 
} 

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

@Override 
public void onAccuracyChanged(Sensor sensor, int accuracy) { 
    // can be safely ignored for this demo 
} 

@Override 
public void onSensorChanged(SensorEvent event) { 
    float x = event.values[0]; 
    float y = event.values[1]; 
    float z = event.values[2]; 
    double a = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); 
    double currentG = (a/ SensorManager.STANDARD_GRAVITY); 
    Toast.makeText(this, "Calculating G's", Toast.LENGTH_LONG).show(); 
    if (!mInitialized && currentG > 1.0) { 
     mLastX = x; 
     mLastY = y; 
     mLastZ = z; 
     mInitialized = true; 
     //Start Second Activity 
     Intent intent = new Intent(getBaseContext(), thirdClass.class); 
     intent.setAction(Intent.ACTION_VIEW); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
     getApplication().startActivity(intent); 
    }else { 
     float deltaX = Math.abs(mLastX - x); 
     float deltaY = Math.abs(mLastY - y); 
     float deltaZ = Math.abs(mLastZ - z); 
     if (deltaX < NOISE) deltaX = (float)0.0; 
     if (deltaY < NOISE) deltaY = (float)0.0; 
     if (deltaZ < NOISE) deltaZ = (float)0.0; 
     mLastX = x; 
     mLastY = y; 
     mLastZ = z; 
    } 
} 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 
} 

이 나에게 오류를 제공하지 않습니다.

+0

게시물을 삭제했습니다. 화면이 꺼지면 흔들려고하십니까? 기기가 잠자기 상태 일 수도 있습니다. – nandeesh

+0

아니요, 화면이 켜져있는 동안 않습니다. – CodeMonkeyAlx

+0

아, oncreate (번들)을 사용하고 있지만 서비스에서 onCreate()를 사용합니다. – nandeesh

답변

1

서비스를 계속 실행하려면 아래 라인을 추가하십시오.

            
 
             
  @Override public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; } 
            
 

또한
서비스 OnResumeOnPause 기능이없는, 그래서 당신은 그들에게 자신을 호출하지 않는 한 그들은 귀하의 경우 쓸모. 그러나 서비스는 당신이 당신의 청취자에게 등록을 취소 무시할 수들의 OnDestroy 기능을 가지고

편집 : 당신은 서비스 호출 그 한 OnCreate 서명하지 않은 onCreate(Bundle savedInstanceState)을 사용하고 있습니다. 사용

public void onCreate() 
+0

좋아, 나는 그 물건을 꺼내서 이것을 추가했다. – CodeMonkeyAlx

+0

난 그냥 문서에서 보았다, 어쩌면 그것은 작동하지 않을거야, 그 기본 반환 값. 당신이 흔들 때 토스트 계산 G가 나타나고 있습니까 – nandeesh

+0

아무 것도 나타나지 않습니다 - 적어도 거기에 변화가 없으므로 내가 생각하기에는 끔찍한 것이 아닙니다. – CodeMonkeyAlx

0

서비스 및 활동은

public class abc extends Service { 
Context mContext; 
@Override 
public void onCreate() 
{ 
    mContext=getApplicationContext(); 
    super.onCreate(); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 

    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public IBinder onBind(Intent intent) 
{ 
    // TODO Auto-generated method stub 
    return null; 
} 

}

의 서비스에서 onCreate 방법의 응용 프로그램 컨텍스트를 얻을 같은 활동을

를 시작하는 적절한 문맥을 받아야합니다 .. 같은 같은 컨텍스트를 사용

그리고이 'mContext'를 사용하여 startActivity를

관련 문제