मेरे पास यह एप्लिकेशन है जो समय-समय पर बीप की सेवा (पृष्ठभूमि) चलाने की आवश्यकता है। फ़ोन को पूरे दिन 5 सेकंड के लिए पूरे दिन बीप की आवश्यकता होती है (सेवा में एक हैंडलर का उपयोग किया जाता है)। मैंने इस सेवा को कार्यान्वित किया है जो यह पूरी तरह से करता है, लेकिन जब फोन गहरी नींद मोड में जाता है, तो इस हैंडलर की रोकथाम बंद हो जाती है। SO में प्रश्न से this उत्तर का उपयोग करके, मैं जागने वाले ताले का उपयोग करने में कामयाब रहा और यह ठीक काम करता है। लेकिन जब मैंने स्पष्ट रूप से फोन को गहरी नींद मोड में रखा, तो हैंडलर निष्पादन बंद कर देता है। मैं सेवा में wakelock कहां रखूं। नीचे कोड स्निपेट।वेक लॉक एंड्रॉइड सेवा आवर्ती
public class PlaySound extends Service{
PowerManager.WakeLock wl ;
PowerManager pm;
private SoundManager mSoundManager;
boolean wakeUpFlag = false;
@Override
public void onCreate(){
super.onCreate();
mSoundManager = new SoundManager();
mSoundManager.initSounds(getBaseContext());
mSoundManager.addSound(1, R.raw.sound);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
startservice();
return START_STICKY;
}
private void startservice() {
System.out.println("Started the service");
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
toastHandler.sendEmptyMessage(0);
}
}, 0, 60000);
}
private final Handler toastHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
result =start();
System.out.println("result"+result);
close();
}
};
protected void close() {
try {
if(wakeUpFlag){
wl.release();
System.out.println("Released the wakelock");
}
if(!pm.isScreenOn()){
System.out.println("Screen is off - back to sleep");
pm.goToSleep(1000);
}
else{
System.out.println("Screen is on - no need to sleep");
}
bs.close();
writer.close();
System.out.println("Closed socket and writer");
System.out.println("Size of file:"+f.length()/1024);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
public void start(){
try{
wakeUpFlag = false;
pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
if(!pm.isScreenOn()) {
wakeUpFlag = true;
wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,"CollectData");
System.out.println("Screen off - wake lock acquired");
wl.acquire();
}
else{
System.out.println("Screen on - no need of wake lock");
}
}
catch(Exception e){
e.printStackTrace();
}
mSoundManager.playSound(1);
}
.उसकी किताबों के लिए सदस्यता ली गई..मुझे कहना होगा..वे महान हैं! धन्यवाद –