2013-05-06 21 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); 
相關問題