2016-07-06 21 views
1
からAlarmReceiverにおける通知のトグルスイッチのオン/オフ振動が

GrayBark言う:「あなたの活動が殺されるとアラームが着信音を停止することが開いているアクティビティは存在しません解雇された場合。」どのように?Xamarinアンドロイド - MainActivity

私は簡単な通知とスイッチボタンを作っています。

1.最初に、私はスイッチボタンを含めず、うまくいきました。私のコード はこの1つ

  • MainActivityのようなものです

    private void MRemindMe_Click(object sender, EventArgs e) 
    { 
        //StartReminder 1-6hrs 
        intRemind = new Intent(this, typeof(AlarmReceiver)); 
        pendInt = PendingIntent.GetBroadcast(this, 0, intRemind, PendingIntentFlags.UpdateCurrent); 
        alarmManager = (AlarmManager)GetSystemService(AlarmService); 
        alarmManager.SetInexactRepeating(AlarmType.ElapsedRealtimeWakeup, SystemClock.ElapsedRealtime() + (1000 * mSeekBar.Progress), (1000 * mSeekBar.Progress), pendInt); 
        mCancelNotif.Visibility = ViewStates.Visible; 
    
    } 
    
  • AlarmReceiver

    public override void OnReceive(Context context, Intent intent) 
    { 
    
        Intent Intent = new Intent(context, typeof(MainActivity)); 
        PendingIntent BuildPendingIntent = PendingIntent.GetActivity(context, 0, Intent, PendingIntentFlags.CancelCurrent); 
        manager = NotificationManager.FromContext(context); 
        ISharedPreferences pref = Application.Context.GetSharedPreferences("MyApp", FileCreationMode.Private); 
        ISharedPreferencesEditor editor = pref.Edit(); 
    
        builder = new NotificationCompat.Builder(context) 
    
         .SetAutoCancel(true) 
         .SetContentIntent(BuildPendingIntent) 
         .SetContentTitle("Remind Me!") 
         .SetTicker("Checklist: Remind Me!") 
         .SetContentText("It's time to check your CheckList!") 
         .SetSmallIcon(Resource.Drawable.Icon) 
         .SetVisibility((int)NotificationVisibility.Public) 
         .SetFullScreenIntent(BuildPendingIntent, true) 
         .SetPriority((int)NotificationPriority.High) 
         .SetDefaults((int)NotificationDefaults.All); 
    
        manager.Notify(0, builder.Build()); 
    
    } 
    

2.

そして最後にスイッチトグルボタンを追加しました。アプリがアクティブで、最小化されているときはかなりうまくいった。しかし、それが殺されると、通知は止まり、アプリは動作を停止する。私はこの問題を解決するにはどうすればよい

 public override void OnReceive(Context context, Intent intent) 
    { 

     Intent Intent = new Intent(context, typeof(MainActivity)); 
     PendingIntent BuildPendingIntent = PendingIntent.GetActivity(context, 0, Intent, PendingIntentFlags.CancelCurrent); 
     manager = NotificationManager.FromContext(context); 
     ISharedPreferences pref = Application.Context.GetSharedPreferences("MyApp", FileCreationMode.Private); 
     ISharedPreferencesEditor editor = pref.Edit(); 

     builder = new NotificationCompat.Builder(context) 

      .SetAutoCancel(true) 
      .SetContentIntent(BuildPendingIntent) 
      .SetContentTitle("Remind Me!") 
      .SetTicker("Checklist: Remind Me!") 
      .SetContentText("It's time to check your CheckList!") 
      .SetSmallIcon(Resource.Drawable.Icon) 
      .SetVisibility((int)NotificationVisibility.Public) 
      .SetFullScreenIntent(BuildPendingIntent, true) 
      .SetPriority((int)NotificationPriority.High); 
     //added Switch Toggle 
     if (MainActivity.mvibrateSW.Checked) 
     { 
      builder.SetDefaults((int)NotificationDefaults.Vibrate); 
     } 

     manager.Notify(0, builder.Build()); 

    } 

AlarmReceiver:コードはこれですか?私も、私はこれと同様の問題を見てきました..私の問題は、私の鼻の下に右であることを感じることができますが、私は最後に How do I stop playing sound by switching between toggle button?

答えて

0

を理解することは、あまりにもぼやけだ、私は答えを得ることができた、おかげであること神に.. まず、問題を理解するために...私のBroadCastReceiverは彼女がMainActivityに依存しているようでした。それは前述のように:トグル振動を切り替えた場合は、MainActivityが殺され

をが、アラーム火災、therforeアラームはBroadCastReceiverがトグルが切り替わっているかどうかを見つけることができないため、火災や未

ません。
To put it Simply 

Switch is On (SetVibration = true) 
    ↳ Click to Turn On alarm 
    ↳ Alarm Service is fired 
     ↳ You want to exit App? = Yes 
     ↳ Alarm Still Firing (but Where is Toggle? is it On/Off?) 
      ↳ Alarm Dies and "Unfortunately, App is not Working" 

したがって、MainActivityをBroadCastReceiverに依存させる必要があります。

解決策は、インテント文字列を使用して通信します。

  • MainActivity

    private void MRemindMe_Click(object sender, EventArgs e) 
    { 
        intRemind = new Intent(this, typeof(AlarmReceiver)); 
        //ToggleSwitch 
        if (mvibrateSW.Checked) 
        { 
         intRemind.PutExtra("vChecked", "On"); 
        } 
        //StartReminder 1-6hrs 
        pendInt = PendingIntent.GetBroadcast(this, 0, intRemind, PendingIntentFlags.UpdateCurrent); 
        alarmManager = (AlarmManager)GetSystemService(AlarmService); 
        alarmManager.SetInexactRepeating(AlarmType.ElapsedRealtimeWakeup, SystemClock.ElapsedRealtime() + (1000 * mSeekBar.Progress), (1000 * mSeekBar.Progress), pendInt); 
        mCancelNotif.Visibility = ViewStates.Visible; 
    } 
    
  • AlarmReceiver

    public override void OnReceive(Context context, Intent intent) 
    { 
        Intent Intent = new Intent(context, typeof(MainActivity)); 
        PendingIntent BuildPendingIntent = PendingIntent.GetActivity(context, 0, Intent, PendingIntentFlags.CancelCurrent); 
        manager = NotificationManager.FromContext(context); 
        ISharedPreferences pref = Application.Context.GetSharedPreferences("MyApp", FileCreationMode.Private); 
        ISharedPreferencesEditor editor = pref.Edit(); 
        string VOn = intent.GetStringExtra("vChecked"); 
        builder = new NotificationCompat.Builder(context) 
    
         .SetAutoCancel(true) 
         .SetContentIntent(BuildPendingIntent) 
         .SetContentTitle("Remind Me!") 
         .SetTicker("Checklist: Remind Me!") 
         .SetContentText("It's time to check your CheckList!") 
         .SetSmallIcon(Resource.Drawable.Icon) 
         .SetVisibility((int)NotificationVisibility.Public) 
         .SetFullScreenIntent(BuildPendingIntent, true) 
         .SetPriority((int)NotificationPriority.High); 
    
        //Receive Command by String 
        string OnVib = intent.GetStringExtra("vChecked"); 
        if (OnVib == "On") 
        { 
         builder.SetDefaults((int)NotificationDefaults.Vibrate); 
        } 
        else 
        { 
         builder.SetDefaults((int)NotificationDefaults.Lights); 
        } 
        manager.Notify(0, builder.Build()); 
    
    } 
    
関連する問題