2013-05-06 70 views
0

出于设计原因,我必须将Android传感器特定的代码实现到类extends Service。例如,使用上下文访问Android服务

public class SmokeService extends Service implements ISmokeDetector { 

    SensorManager mySensorManager; 
    Sensor myProximitySensor; 
    private double currentLightReading; 
    private Context myContext; 

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

    @Override 
    public void onCreate() { 
     super.onCreate(); 

    mySensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
myProximitySensor = mySensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
mySensorManager.registerListener(proximitySensorEventListener, myProximitySensor, SensorManager.SENSOR_DELAY_NORMAL); 

    } 

    SensorEventListener proximitySensorEventListener = new SensorEventListener() { 
     @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 

    } 
    }; 

    @Override 
    public SmokePresenceStruct getsmokePresence() { 

       return new SmokePresenceStruct(true, timestamp); 

     } 

    @Override 
    public void getsmokePresence(ListenersmokePresence handler) { 
      handler.onNewsmokePresence(this.getsmokePresence()); 
    } 

    @Override 
    public boolean isEventDriven() { 

    } 
} 

我的问题是,“有没有办法通过非Android的Java类,以启动上述服务?”比方说,我有一个Java类,谁拥有上下文,它要开始这个服务。例如:

public class AndroidSmokeDetector { 

    Context myContext; 

    public AndroidSmokeDetector(Context context, Object obj) { 
     //super(context); 
     this.myContext = context; 

    } 
} 

可以请教我通过AndroidSmokeDetector类与服务交互的方式。假设我将从MainActivity获取上下文?”

回答

1

是在AndroidSmokeDetector就叫

myContext.startService(myContext, SmokeService.class); 
+0

但AndroidSmokeDetector类未使用Activity进行扩展。所以,我想这是不可能的。我已经尝试了这一点,但是这对我有限的Android知识来说是不可能的。 – Pankesh 2013-05-06 17:33:54

+1

@PankeshPatel将活动上下文传递给AndroidSmokeDetector类的构造函数。 – Raghunandan 2013-05-06 17:35:47

+0

你有一个具有上下文参数的构造函数,只要你有一个上下文就可以了。 – 2013-05-06 17:38:02

0

有没有办法通过非Android的Java的 类启动上述服务?

选项1:

是的,你会升需要使用类构造函数在非活动越来越语境class.do它:

public class AndroidSmokeDetector { 
    Context myContext; 

    public AndroidSmokeDetector(Context context, Object obj) { 
     //super(context); 
     this.myContext = context; 
    } 
//... 
} 

使用myContextAndroidSmokeDetector类作为启动服务:

myContext.startService(myContext, SmokeService.class); 

使用AndroidSmokeDetector类发送MainActivity活动背景构造函数:

AndroidSmokeDetector objsmokeclass=new AndroidSmokeDetector(MainActivity.this); 

选项2:

而不是使用类构造函数中你可以在非活动class.as开始服务创建一个参数化方法:

public class AndroidSmokeDetector { 

    public void startServiceFromNonActivityClass(Context myContext){ 

     //start service here... 
    myContext.startService(myContext, SmokeService.class); 
    } 
//... 
} 

现在只是调用方法,通过从活动传递当前上下文为起始服务:

AndroidSmokeDetector objsmokeclass=new AndroidSmokeDetector(); 
objsmokeclass.startServiceFromNonActivityClass(MainActivity.this);