2012-05-07 9 views
8

एक समस्या है - मेरी मुख्य गतिविधि सेवा शुरू करती है और तब बंद हो जाती है। जब अगली बार आवेदन शुरू होता है तो एप्लिकेशन को इस सेवा का संदर्भ मिलना चाहिए और इसे रोकना चाहिए। लेकिन मुझे नहीं पता कि मैं एक चल रही सेवा का संदर्भ कैसे प्राप्त कर सकता हूं। कृपया, मुझे उम्मीद है कि आप मेरी मदद कर सकते हैं। धन्यवाद।सेवा चलाने के संदर्भ में कैसे प्राप्त करें?

उत्तर

0
private boolean isMyServiceRunning() { 
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if ("your.service.classname".equals(service.service.getClassName())) { 
      return false; 
     } 
    } 
    return true; 
} 

if(isMyServiceRunning()) { 
    stopService(new Intent(ServiceTest.this,MailService.class)); 
} 
+0

लेकिन मैं आपके उदाहरण का उपयोग करके सेवा को कैसे रोक सकता हूं? – user1166635

+0

@ user1166635 बहुत आसानी से, मेरा संपादन देखें। –

+3

उम .. यह बहुत जरूरी है। आपकी 'सेवा' चल रही है या नहीं, इस पर ध्यान दिए बिना बस 'स्टॉप सेवा' पर कॉल करें - यदि कोई नहीं है तो कोई नुकसान नहीं है - 'स्टॉप सेवा' केवल 'झूठी' वापस आ जाएगी। – Jens

11

यह उत्तर answer by @DawidSajdak पर आधारित है। उनका कोड अधिकतर सही है, लेकिन उन्होंने return कथनों को स्विच किया, इसलिए यह इच्छित परिणाम के विपरीत देता है। सही कोड होना चाहिए:

private boolean isMyServiceRunning() { 
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if ("your.service.classname".equals(service.service.getClassName())) { 
      return true; // Package name matches, our service is running 
     } 
    } 
    return false; // No matching package name found => Our service is not running 
} 

if(isMyServiceRunning()) { 
    stopService(new Intent(ServiceTest.this,MailService.class)); 
} 
संबंधित मुद्दे