2011-03-25 41 views
6

मेरा ऐप अलार्म सेट कर रहा है:फोर्स स्टॉप एप्लिकेशन - यह सेट किए गए किसी भी अलार्म को भी रद्द करता है?

AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
mgr.setRepeating(
    AlarmManager.RTC_WAKEUP, 
    firstRun, 
    interval, 
    makePendingIntent(context)); 

ठीक काम करता है। अगर मैं सिस्टम सेटिंग्स में जाता हूं -> एप्लिकेशन, और मेरे ऐप को बल-रोक देता है, ऐसा लगता है कि यह मेरे द्वारा निर्धारित किसी भी अलार्म को रद्द करने का प्रभाव भी है। क्या ये सच है? यदि ऐसा है, तो मैं एक अजीब स्थिति में हूं जहां मेरी आखिरी ज्ञात सेटिंग्स हैं कि उपयोगकर्ता ने वास्तव में अलार्म सेट किया था, लेकिन सिस्टम मेरी पीठ के पीछे रद्द हो सकता है, इसलिए अब मैं उपयोगकर्ता को गलत स्थिति दिखा रहा हूं चाहे अलार्म सेट हो या नहीं।

धन्यवाद

उत्तर

2

हाँ, यह सच है। जहां तक ​​आप जानते हैं, आप अपनी स्थिति को सही बनाना चाहते हैं। अगर अपने अलार्म अभी भी देखते हैं आप 2 कदम उठाने के लिए है की जाँच करने के लिए: - समारोह checkPendingIntent बिल्कुल PendingIntent.getBroadcast में makePendingIntent इस ध्वज के अलावा और परिणाम का चेक तरह होगा अपने PendingIntentFLAG_NO_CREATE साथ बनाने के लिए

  1. atempt - अगर अलार्म को सामान्य तरीके से रद्द कर दिया गया है (अपने आप से, निश्चित रूप से यदि आपने cancel() को अपने PendingIntent एस के लिए बुलाया है) या यदि आपका ऐप फोर्स स्टॉप (यानी बिना किसी अपवाद के) के क्रैश हो गया है, तो PendingIntent.getBroadcast शून्य हो जाएगा।
  2. यदि लंबित प्रवेश मौजूद है तो आपका अलार्म सेट हो सकता है। इसे जांचने के लिए आपको सभी अलार्म के बारे में सिस्टम जानकारी डंप करना होगा और वहां अपनी खोज करनी होगी। जानकारी डंप करने के लिए आप dumpsys आप उपयोगकर्ता के अनुमति DUMP की आवश्यकता है

    String collectAlarmsInfo() { 
        StringBuilder result = new StringBuilder(); 
        try { 
         Process process = Runtime.getRuntime().exec("dumpsys alarm"); 
         BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
    
         String line; 
         while ((line = bufferedReader.readLine()) != null) { 
          result.append(line); 
          result.append("\n"); 
         } 
        } catch (IOException e) { 
         Log.e(TAG, "Could not retrieve data", e); 
        } 
        return result.toString(); 
    } 
    

    उपयोग करने के लिए कॉल करने के लिए की है। आप डंप है जब आप अपने पैकेज का नाम से आप इसे में अलार्म की पहचान कर सकते हैं, तो जांच की जाएगी

    boolean alarmIsSet = collectAlarmsInfo().contains(<your package name>); 
    
संबंधित मुद्दे