2016-04-18 12 views
7
  • Xamarin रूपों में अलार्म प्रबंधक का प्रयोग अधिसूचना मैं एक dependencie 30 सेकंडअनुसूची के लिए एंड्रॉयड

  • के लिए सूचनाएं

  • मेरे DeviceDetails_Droid.cs में मैंने सेट सेट अलार्म को दिखाने के लिए बनाया है स्थानीय अधिसूचना के लिए कार्यक्षमता पूरी तरह से काम करती है जब ऐप सक्रिय होता है लेकिन जब मैंने ऐप (करीबी ऐप) को मार दिया तो अलार्म रिसीवर कॉल नहीं किया गया।


public void ShowNotification(string message, string title) 
{ 

Intent alarmIntent = new Intent(Forms.Context, typeof(AlarmReceiver)); 
alarmIntent.PutExtra ("message", message); 
alarmIntent.PutExtra ("title", title); 

    PendingIntent pendingIntent = PendingIntent.GetBroadcast(Forms.Context, 0, alarmIntent, PendingIntentFlags.UpdateCurrent); 
    AlarmManager alarmManager = (AlarmManager) Forms.Context.GetSystemService(Context.AlarmService); 

    //TODO: For demo set after 5 seconds. 
    alarmManager.Set(AlarmType.RtcWakeup, DateTime.Now.Millisecond + 30000, pendingIntent); 
} 

  • Androids MainActivity में

[BroadcastReceiver] 
public class AlarmReceiver : BroadcastReceiver 
{ 
    public override void OnReceive (Context context, Intent intent) 
    { 

     var message = intent.GetStringExtra ("message"); 
     var title = intent.GetStringExtra ("title"); 

     var notIntent = new Intent (context, typeof(MainActivity)); 
     var contentIntent = PendingIntent.GetActivity (context, 0, notIntent, PendingIntentFlags.CancelCurrent); 
     var manager = NotificationManagerCompat.From (context); 

     var style = new NotificationCompat.BigTextStyle(); 
     style.BigText(message); 



     //Generate a notification with just short text and small icon 
     var builder = new NotificationCompat.Builder (context) 
      .SetContentIntent (contentIntent) 
      .SetSmallIcon (Resource.Drawable.Icon) 
      .SetContentTitle (title) 
      .SetContentText (message) 
      .SetStyle (style) 
      .SetWhen (Java.Lang.JavaSystem.CurrentTimeMillis()) 
      .SetAutoCancel (true); 

     var notification = builder.Build(); 
     manager.Notify(0, notification); 
    } 
} 

  • और मैनिफ़ेस्ट फ़ाइल में

<receiver 
android:name=".AlarmReceiver" 
android:enabled="true" 
android:exported="true" 
android:process=":remote" 
android:label="AlarmReceiver"> 

  • ऊपर कोड पूरी तरह से चल रहा है जब एप्लिकेशन राज्य चलाने में है लेकिन अधिसूचना वर्किंग जब एप्लिकेशन बंद हो नहीं है या मारे
+1

आप पृष्ठभूमि सेवा को लागू करने के बाद एप्लिकेशन मारे गए या बंद कर दिया है कि यह काम करने की जरूरत है। इसे देखें: http://stackoverflow.com/a/34207954/6127411। –

+0

मैनिफेस्ट में <रिसीवर एंड्रॉइड: नाम = "अलार्म रिसीवर" एंड्रॉइड: सक्षम = "सत्य" एंड्रॉइड: निर्यात किया गया = "सत्य" एंड्रॉइड: प्रक्रिया = ": रिमोट" एंड्रॉइड: लेबल = "अलार्म रिसीवर"> – user797725

उत्तर

0

अलार्ममेनगर काम करेगा जब ए पीपी अग्रभूमि या पृष्ठभूमि में चल रहा है। लेकिन जब ऐप छोड़ दिया जाता है/बल से रोका/मारा जाता है तो अलार्म प्रबंधक भी मारे जाते हैं। अगर अलार्म फिर से बूट हो जाता है या ऐप फिर से उपयोगकर्ता द्वारा लॉन्च किया जाता है तो अलार्म फिर से बंद हो जाएगा। इन उत्तरों को संदर्भ link1, link2

+0

क्या यह अभी भी मामला है? आपके द्वारा साझा किए गए लिंक अब थोड़ा दिनांकित हैं। –

+0

तो मौजूदा अलार्म ऐप्स कैसे करते हैं?, क्योंकि उनके लिए वे अभी भी काम करते हैं, लेकिन वे –

5

1) यदि कोई आपके ऐप को मारता है, तो आपके ऐप में पंजीकृत अलार्म रद्द कर दिए जाते हैं।

2) आप के लिए अपने अलार्म रजिस्टर, या किसी अन्य कोड आप सेटअप के लिए अपनी सूचनाओं की जरूरत को चलाने के लिए डिवाइस के Boot पर पृष्ठभूमि में आपकी सेवा शुरू ...

  • जोड़ें "एंड्रॉयड। intent.action।BOOT_COMPLETED "अपने BroadcastReceiver रहे हैं:

[BroadcastReceiver] 
[IntentFilter(new string[]{"android.intent.action.BOOT_COMPLETED"}, Priority = (int)IntentFilterPriority.LowPriority)] 
public class AlarmReceiver : BroadcastReceiver 

  • बूट पूरा अनुमति में अपने प्रकट ऐड में:

<uses-permission android:name="android.permission.WAKE_LOCK"/> 
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>  

Xamarin के Stock Price example के मामले में, यदि आप सेट "RECEIVE_BOOT_COMPLETED" आप कर रहे हैं "ऑटो" आपकी सेवा को पुनः आरंभ करने और अपने उनके फोन के रिबूट पर पहली बार अपने एप्लिकेशन को लॉन्च करने के बिना सूचनाएं प्राप्त होने लगेंगी:

[BroadcastReceiver] 
[IntentFilter(new string[]{StockService.StocksUpdatedAction,Boo "android.intent.action.BOOT_COMPLETED"}, Priority = (int)IntentFilterPriority.LowPriority)] 
public class StockNotificationReceiver : BroadcastReceiver 

3) आप एक Service बनाम एक SeviceIntent उपयोग कर सकते हैं और ओवरराइड StartCommandResultSticky

वापस जाने के लिए एक चिपचिपा आधारित सेवा के साथ, अगर यह समाप्त हो जाता है इसे पुन: प्रारंभ किया गया है।

onStartCommand (आशय, int, int) से वापस जाने के लिए लगातार: जबकि यह शुरू कर दिया है (onStartCommand (आशय, int, int) से लौटने के बाद) इस सेवा की प्रक्रिया को मार डाला है, तो इसे शुरू किया राज्य में छोड़ लेकिन इस वितरित इरादे को बरकरार न रखें। बाद में सिस्टम सेवा को फिर से बनाने की कोशिश करेगा। चूंकि यह प्रारंभिक स्थिति में है, इसलिए यह नई सेवा उदाहरण बनाने के बाद स्टार्टकॉमैंड (इरादा, int, int) पर कॉल करने की गारंटी देगा; यदि सेवा में कोई लंबित प्रारंभिक आदेश नहीं दिया गया है, तो इसे शून्य उद्देश्य वस्तु के साथ बुलाया जाएगा, इसलिए आपको इसकी जांच करने के लिए सावधानी बरतनी चाहिए।

public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId) 
    { 
     return StartCommandResult.Sticky; 
    } 
+0

पर मारे गए हैं, मैंने पहले अनुच्छेद [यहां] (https://developer.android.com/reference/android/provider/AlarmClock) को देखा। एचटीएमएल) और ऐसा लगता है कि इस मामले में शायद 'SET_ALARM' अनुमति की आवश्यकता नहीं है, क्या यह सच है? मैं स्थानीय अधिसूचनाओं को निर्धारित करने और सोच रहा हूं कि मुझे उस अनुमति को जोड़ना चाहिए या नहीं। ऐसा लगता है कि इसके बिना अब तक काम कर रहा है। धन्यवाद। – hvaughan3

+0

@ hvaughan3 अगर आप अपना अलार्म घड़ी आवेदन लिख रहे हैं, तो आपको इरादे प्राप्त करने के लिए उस परमिट को सेट करने की आवश्यकता है। यदि आप अलार्म ऐप से इरादे प्राप्त कर रहे हैं, तो इसकी आवश्यकता नहीं है। – SushiHangover

+0

यह अब समझ में आता है। धन्यवाद – hvaughan3

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