android Notification实践

1,先是布局  R.layout.activity_notification

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.halong.myapplication.Notification.NotificationActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <Button
            android:id="@+id/button1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="show a default notification."
            android:textAllCaps="false"/>
        <Button
            android:id="@+id/button2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="show a custom notification."
            android:textAllCaps="false"/>

    </LinearLayout>

</android.support.constraint.ConstraintLayout>
2, NotificationActivity

public class NotificationActivity extends AppCompatActivity implements View.OnClickListener {


    /**
     * show a default notification.
     */
    private Button mButton1;
    /**
     * show a custom notification.
     */
    private Button mButton2;

    private NotificationManager mNotificationManager;
    private NotificationCompat.Builder mDefaultNotificationBuilder;
    private NotificationCompat.Builder mCustomNotificationBuilder;
    private RemoteViews mCostomContenView;

    private BroadcastReceiver mReceiver;
    private Handler mHandler;
    private MyThread mThread = null;

    private int progress = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_notification);

        initData();
        initView();
    }

    @Override
    protected void onStart() {
        super.onStart();

        //注册BroadcastReceiver
        IntentFilter filter = new IntentFilter();
        filter.addAction("PauseOrContinue");
        filter.addAction("Exit");
        registerReceiver(mReceiver, filter);

        //开启ProgressBar更新线程
        if (mThread != null && !mThread.isAlive()) {
            mThread.start();
        }
    }

    @Override
    protected void onStop() {
        //注销BroadcastReceiver
        unregisterReceiver(mReceiver);

        //关闭更新线程
        if (mThread != null && mThread.isAlive()) {
            mThread.interrupt();
        }
        super.onStop();
    }

    //以下是自定义方法

    private void initData() {
        mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        mDefaultNotificationBuilder = new NotificationCompat.Builder(this);
        mCustomNotificationBuilder = new NotificationCompat.Builder(this);
        mCostomContenView = new RemoteViews(getPackageName(), R.layout.layout_notification);

        mReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                switch (intent.getAction()) {
                    case "PauseOrContinue":
                        if (mThread.isPause) {
                            mCostomContenView.setTextViewText(R.id.text1, "Pause");
                            mCustomNotificationBuilder.setCustomContentView(mCostomContenView);
                            mNotificationManager.notify(1, mCustomNotificationBuilder.build());
                            mThread.goon();
                        } else {
                            mCostomContenView.setTextViewText(R.id.text1, "Continue");
                            mCustomNotificationBuilder.setCustomContentView(mCostomContenView);
                            mNotificationManager.notify(1, mCustomNotificationBuilder.build());
                            mThread.pause();
                        }
                        break;

                    case "Exit":
                        mThread.pause();
                        mNotificationManager.cancel(1);
                        break;
                }

            }
        };

        mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);

                Log.d("==>", msg.what + "");
                switch (msg.what) {
                    case 1:
                        if (progress >= 100) {
                            mThread.pause();
                            mNotificationManager.cancel(1);
                        } else {
                            progress++;
                            mCostomContenView.setProgressBar(R.id.progress, 100, progress, false);
                            mCustomNotificationBuilder.setCustomContentView(mCostomContenView);
                            mNotificationManager.notify(1, mCustomNotificationBuilder.build());
                        }
                        break;

                }

            }
        };

        mThread = new MyThread(mHandler);
    }

    private void initView() {
        mButton1 = (Button) findViewById(R.id.button1);
        mButton1.setOnClickListener(this);
        mButton2 = (Button) findViewById(R.id.button2);
        mButton2.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button1:
                showDefaultNotification();
                break;
            case R.id.button2:
                showCustomNotification();
                progress = 0;
                mThread.goon();
                break;
        }
    }

    public void showDefaultNotification() {
        Intent intent = new Intent(this, NotificationActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

        mDefaultNotificationBuilder.setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
                .setTicker("this is a default notification.")
                .setContentTitle("content tittle")
                .setContentText("this is a default notification.")
                .setDefaults(Notification.DEFAULT_ALL)
                .setNumber(1)
                .setWhen(System.currentTimeMillis())
                .setContentIntent(pendingIntent)
                .setAutoCancel(true)
                .addAction(R.mipmap.ic_launcher, "click1", pendingIntent)
                .addAction(R.mipmap.ic_launcher, "click2", pendingIntent)
                .setProgress(100, 20, true);

        mNotificationManager.notify(0, mDefaultNotificationBuilder.build());
    }


    private void showCustomNotification() {
        mCustomNotificationBuilder.setSmallIcon(R.mipmap.ic_launcher)
                .setTicker("mCustomNotificationBuilder");

        mCostomContenView.setTextViewText(R.id.text1, "Pause");

        Intent intent = new Intent("PauseOrContinue");
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        mCostomContenView.setOnClickPendingIntent(R.id.text1, pendingIntent);

        Intent intent2 = new Intent("Exit");
        PendingIntent pendingIntent2 = PendingIntent.getBroadcast(this, 0, intent2, PendingIntent.FLAG_CANCEL_CURRENT);
        mCostomContenView.setOnClickPendingIntent(R.id.text2, pendingIntent2);

        mCostomContenView.setProgressBar(R.id.progress, 100, 0, false);

        mCustomNotificationBuilder.setCustomContentView(mCostomContenView);
        mCustomNotificationBuilder.setOngoing(true);
        mNotificationManager.notify(1, mCustomNotificationBuilder.build());
    }


    //时间线程  Thread + Handler用来更新ProgressBar
    class MyThread extends Thread {
        Handler mHandler;
        boolean isStop = false;
        boolean isPause = true;

        public MyThread(Handler mHandler) {
            this.mHandler = mHandler;
        }

        @Override
        public void run() {
            super.run();
            while (!isStop) {
                if (!isPause) {
                    mHandler.sendEmptyMessage(1);
                }
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        public void pause() {
            isPause = true;
        }

        public void goon() {
            isPause = false;
        }

        @Override
        public void interrupt() {
            isPause=true;
            isStop=true;
            super.interrupt();
        }
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值