在Android自定义通知

时间:2018-02-16 09:48:37

标签: xamarin textview android-broadcastreceiver main-activity

我有一个实现remoteview的自定义本地通知,包括三个按钮和一个textview。按钮单击通知更改铃声的音量,但我想每次向上按钮点击或减少时增加一个变量计数,然后每次向下按钮点击计数。我有更新textview的问题,因为广播类无法直接访问它。我从帖子中尝试了一种方法,但我无法使其发挥作用。 我在tvUpdate.text = t时得到null异常; 任何想法都会被贬低。感谢

远程视窗

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="75dp"
    android:weightSum="100"
    android:padding="5dp"
    android:background="#969696"
    android:minWidth="25px"
    android:minHeight="25px">
    <Button
        android:text="Vol_Up"
        android:layout_width="0dp"
        android:layout_weight="25"
        android:background="@drawable/roundcnr"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:textColor="#FFFFFF"
        android:id="@+id/btnVolUp" />
    <Button
        android:text="V_Down"
        android:layout_width="0dp"
        android:layout_weight="25"
        android:layout_margin="5dp"
        android:textColor="#FFFFFF"
         android:background="@drawable/roundcnr"
        android:layout_height="wrap_content"
        android:id="@+id/btnVolDown" />
    <Button
        android:text="Silent"
        android:layout_width="0dp"
        android:layout_weight="25"
        android:layout_margin="5dp"
         android:background="@drawable/roundcnr"
        android:layout_height="wrap_content"
        android:textColor="#FFFFFF"
        android:id="@+id/btnVolSilent" />
    <TextView
        android:text="Status"
        android:layout_width="0dp"
        android:layout_weight="25"
        android:textColor="#FFFFFF"
        android:layout_height="wrap_content"
        android:id="@+id/tvVol" />
</LinearLayout>

广播组

namespace RingerTest
{
    [BroadcastReceiver]
    public class myBroadCastR : BroadcastReceiver
    {
        public double counter { get; set; }
        public override void OnReceive(Context context, Intent intent)
        {

           if(intent.Action== "VolumeUp")
            {
                counter += 6;
                // Toast.MakeText(context,"VolumeUp",ToastLength.Long).Show();
                AudioManager audioManager = (AudioManager)context.GetSystemService(Context.AudioService);
                audioManager.AdjustSuggestedStreamVolume(Adjust.Raise, Stream.Ring, VolumeNotificationFlags.PlaySound);
                try
                {
                    MainActivity.getinstance().updateTextView(counter.ToString() + "%");

                }
                catch (Exception ex)
                {


                }
            }
            else if (intent.Action == "VolumeDown")
            {
                counter -= 6;
                //  Toast.MakeText(context, "VolumeDown",ToastLength.Long).Show();
                AudioManager audioManager = (AudioManager)context.GetSystemService(Context.AudioService);
                audioManager.AdjustSuggestedStreamVolume(Adjust.Lower, Stream.Ring, VolumeNotificationFlags.PlaySound);
                 try
                {
                    MainActivity.getinstance().updateTextView(counter.ToString() + "%");

                }
                catch (Exception ex)
                {


                }

            }
            else if (intent.Action == "Silent")
            {
                counter = 0;
                //  Toast.MakeText(context, "VolumeDown",ToastLength.Long).Show();
                AudioManager audioManager = (AudioManager)context.GetSystemService(Context.AudioService);
                audioManager.RingerMode = RingerMode.Silent;
                MainActivity.getinstance().updateTextView(counter.ToString()+"%");

            }

        }
    }
}

MainActivity

namespace RingerTest
{
    [Activity(Label = "RingerTest", MainLauncher = true)]
    public class MainActivity : Activity
    {

        public static MainActivity ins;
        private myBroadCastR myBroadl;
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            ins = this;
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);
            var myreceiver = new myBroadCastR();

            var intentfilter = new IntentFilter();
            intentfilter.AddAction("VolumeUp");
            intentfilter.AddAction("VolumeDown");
            intentfilter.AddAction("Silent");
            RegisterReceiver(myreceiver, intentfilter);

            Button btnNotify = FindViewById<Button>(Resource.Id.button1);
            btnNotify.Click += BtnNotify_Click;
        }
        public static MainActivity getinstance()
        {
            return ins;
        }
        public void updateTextView(string t)
        {
            MainActivity.ins.RunOnUiThread(() =>
            {
                TextView tvUpdate = FindViewById<TextView>(Resource.Id.tvVol);
                tvUpdate.Text = t;
            });

        }
        private void BtnNotify_Click(object sender, System.EventArgs e)
        {
            const int requestID = 1;
            //Volume Up 
            Intent intent_V_UP = new Intent("VolumeUp");

            PendingIntent pIntent_V_UP = PendingIntent.GetBroadcast(this, requestID, intent_V_UP, PendingIntentFlags.UpdateCurrent);
            //Volume Down
            Intent intent_V_Down = new Intent("VolumeDown");
            PendingIntent pIntent_V_Down = PendingIntent.GetBroadcast(this, requestID, intent_V_Down, PendingIntentFlags.UpdateCurrent);
            //Silent
            Intent intent_Silent = new Intent("Silent");
            PendingIntent pIntent_Silent = PendingIntent.GetBroadcast(this, requestID, intent_Silent, PendingIntentFlags.UpdateCurrent);
            Notification.Builder builder = new Notification.Builder(this);
            builder.SetSmallIcon(Resource.Drawable.addContact);
            /*
            builder.SetContentTitle("VolControl");
            builder.AddAction(Resource.Drawable.addContact, "VolDown", pIntent_V_Down);

            builder.AddAction(Resource.Drawable.addContact, "VolUP", pIntent_V_UP);*/

            //Custom View for Notification
            RemoteViews remoteViews = new RemoteViews(this.PackageName, Resource.Layout.customNotification);

            //On Button Click in CustomView
            remoteViews.SetOnClickPendingIntent(Resource.Id.btnVolUp, pIntent_V_UP);
            remoteViews.SetOnClickPendingIntent(Resource.Id.btnVolDown, pIntent_V_Down);
            remoteViews.SetOnClickPendingIntent(Resource.Id.btnVolSilent, pIntent_Silent);


            Notification notification = builder.Build();

            notification.BigContentView = remoteViews;
            notification.Flags = NotificationFlags.NoClear;

            NotificationManager notificationManager = (NotificationManager)GetSystemService(NotificationService);
            notificationManager.Notify(1, notification);

        }
    }
}

0 个答案:

没有答案