2012-07-14 48 views
9

मैं एक ऐप लिख रहा हूं जो उपयोगकर्ता को बहुत समय की संवेदनशील जानकारी के बारे में सूचित करता है, और मुझे लगता है कि उनमें से बहुत से छोटे अधिसूचना ध्वनियों के बजाय फोन रिंगटोन का उपयोग करना चाहते हैं। मैंने अपनी वरीयता स्क्रीन में android:ringtoneType="all" सेट करके इस सुविधा को सक्षम किया है, और यह बहुत अच्छा काम करता है कि जब एक फोन रिंगटोन चुना जाता है, तो जब तक उपयोगकर्ता अधिसूचना बार को छूता है तब तक यह खेलना जारी रखता है ... मैं इसे 30 सेकंड के बाद बंद करने के लिए कैसे प्राप्त कर सकता हूं या तो, अधिसूचना रद्द किए बिना?30 सेकंड के बाद एंड्रॉइड अधिसूचना रिंगटोन को कैसे रोकें?

यहाँ कोड मैं अपने C2DM रिसीवर में उपयोग कर रहा हूँ:

NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
Notification notif = new Notification(....) 
.... 
String ringtone = PreferenceManager.getDefaultSharedPreferences(context).getString("ringtone", ""); 
notif.sound = Uri.parse(ringtone); 
notif.audioStreamType = AudioManager.STREAM_NOTIFICATION; 
nm.notify(1, notif); 
+4

ऑफटॉपिक: सी 2 डीएम को Google क्लाउड मैसेजिंग (जीसीएम) –

उत्तर

6

एंड्रॉयड आप ध्वनि खेलने अधिसूचना के साथ हस्तक्षेप करने का उपयोग, लेकिन आप खेल रहे हैं आप रिंगटोन का पूरा नियंत्रण है, तो नहीं देता है , तो आप इसे 30 सेकंड के बाद रोक सकते हैं या जो कुछ भी आप चाहते हैं उसे कर सकते हैं।

यहां, मुझे लगता है कि आप अधिसूचना निष्पादित करने के लिए पृष्ठभूमि सेवा का उपयोग कर रहे हैं।

प्रारंभिक चरण के रूप में, आपको बिना ध्वनि के अधिसूचना बनाना चाहिए। बस एक डिफ़ॉल्ट, सरल टास्कबार अधिसूचना। फिर, हम 30 सेकंड के लिए रिंगटोन खेलने के लिए अपने MediaPlayer ऑब्जेक्ट का उपयोग करेंगे।

1) यदि आप स्पॉट पर अधिसूचना निष्पादित कर रहे हैं: मीडियाप्लेयर ऑब्जेक्ट बनाएं, अधिसूचना शुरू करने के बाद उपयोगकर्ता ने रिंगटोन बजाना शुरू करें। फिर टाइमर और टाइमरटास्क (see example here) का उपयोग करने के तरीके पर 30 सेकंड की गणना करें या ScheduledThreadPoolExecutor और 30 सेकंड के बाद रिंगटोन को रोकने के लिए MediaPlayer stop() को कॉल करें।

2) यदि आप बाद में किसी समय के लिए अधिसूचना शेड्यूल कर रहे होते: जैसे ही आप अपने सूचना सेट के रूप में, एक AlarmManager बनाने और इसे अनुसूची ताकि यह आपके अधिसूचना के साथ एक ही समय में प्रारंभ नहीं होगा। आपका अलार्म एक और पृष्ठभूमि सेवा को ट्रिगर कर सकता है जिसे आपने लिखा है जिसमें आपने मीडियाप्लेयर ऑब्जेक्ट का उपयोग करके 30 सेकंड के लिए रिंगटोन चलाया है जैसा कि भाग 1 में बताया गया है)।

दोनों मामलों में, अधिसूचना अभी भी वहां होगी और जिस तरह से आप रिंगटोन खेलेंगे, वह पूरी तरह से स्वतंत्र होगा। रिंगटोन पर आपका पूरा नियंत्रण होगा। यदि आप उस समय तक अधिसूचना की जांच नहीं करते हैं, तो आप कुछ निर्धारित समय के बाद इसे 30 सेकंड के लिए भी फिर से चला सकते हैं (चूंकि आप कह रहे हैं कि अधिसूचना बहुत समय संवेदनशील जानकारी प्रदान करती है, अन्यथा मैं रिंगटोन के साथ उपयोगकर्ता को बग नहीं करूंगा insistingly)।

+0

का उपयोग करके इसे फिर से लिख दिया गया है, क्या कोई तरीका है जब उपयोगकर्ता पहचानने के लिए अधिसूचना बार को छूता है और अलार्म बंद कर देता है? इसके अलावा रिंगटोन खेलना बहुत परेशान होगा .. अगर यह एकमात्र विकल्प है तो मैं उन्हें कुछ विस्तारित नोटिफिकेशन टोन या कुछ –

+0

डाउनलोड करने की सलाह दे सकता हूं बेशक, इसका पता लगाने के कई तरीके हैं और यह सब इस बात पर निर्भर करता है कि यह क्या है आप अपनी अधिसूचना करना चाहते हैं। फिर, आपको अपनी अधिसूचना के इरादे को प्राप्त करने वाली परिणामी गतिविधि और Mediaplayer ऑब्जेक्ट रखने और प्लेबैक रद्द करने के लिए आपकी सेवा के बीच संवाद करना चाहिए। नोटिफिकेशन कैप्चर करने के तरीके पर एक विस्तृत ट्यूटोरियल यहां दिया गया है: http://developer.android.com/guide/topics/ui/notifiers/notifications।एचटीएमएल – Erol

+0

मैं इस बारे में बात नहीं कर रहा हूं कि अधिसूचना कब क्लिक की जाती है, या यहां तक ​​कि खारिज कर दिया जाता है। मेरा मतलब है कि आम तौर पर यदि कोई उपयोगकर्ता अधिसूचना बार के शीर्ष को छूता है, तो कोई और आवाज नहीं खेला जाता है। मुझे उस पर कब्जा करने का कोई रास्ता नहीं दिख रहा है, क्या मैं गलत हूँ? –

11

यह करना चाहिए।

.... 
mediaPlayer.start(); 
.... 
final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      if (mediaPlayer.isPlaying()) 
       mediaPlayer.stop(); 
     } 
    }, timeout); 
+0

जहां आपको मीडियाप्लेयर इंस्टेंस मिला है? – RaphMclee

1

एक सरल समाधान का 30 सेकेंड के बाद अधिसूचना रद्द करने और एक नया बनाने के लिए किया जाएगा।

आप मूल अधिसूचना को भी क्लोन कर सकते हैं और केवल नए के लिए रिंग-टोन को हटा सकते हैं।

+0

मैं कैसे पता लगा सकता हूं कि उपयोगकर्ता द्वारा अधिसूचना पहले ही रद्द कर दी गई है, इसलिए मैं इसे पहले ही क्लिक करने के बाद डुप्लिकेट अधिसूचना नहीं डाल रहा हूं? –

संबंधित मुद्दे