通知:notification

在app开发少不了用到通知,上个星期刚做,写下来下次用就可以直接copy了,机智如我。

效果图:

1请求权限的Dialog:

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="260dp"
    android:gravity="center"
    android:background="@drawable/up_background"
    android:layout_height="160dp">
    <TextView
        android:layout_marginTop="20dp"
        android:textColor="#0e0e0e"
        android:textSize="16sp"
        android:text="“白丁”想给你发送通知"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:layout_marginRight="16dp"
        android:layout_marginLeft="16dp"
        android:gravity="center"
        android:textColor="@color/main"
        android:layout_marginTop="7dp"
        android:text="“ 通知 ”只在软件更新时显示下载新APP的进度(请取消屏蔽通知或运行通知),可在设置中配置。"
        android:textSize="14sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <View
        android:layout_marginTop="10dp"
        android:background="@color/main"
        android:layout_width="match_parent"
        android:layout_height="0.3dp"/>
    <RadioGroup
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RadioButton
            android:textSize="14sp"
            android:id="@+id/cancel"
            android:padding="13dp"
            android:gravity="center"
            android:button="@null"
            android:layout_weight="1"
            android:textColor="@color/main"
            android:text="不允许"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <View
            android:background="@color/main"
            android:layout_width="0.3dp"
            android:layout_height="match_parent"/>
        <RadioButton
            android:textSize="14sp"
            android:id="@+id/go_on"
            android:padding="13sp"
            android:gravity="center"
            android:button="@null"
            android:layout_weight="1"
            android:textColor="@color/main"
            android:text="允许"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </RadioGroup>
</LinearLayout>

JAVA:

/**
 * 提示用户开启Notification的权限
 * Created by Administrator on 2018/8/2.
 */

public class MyDialog extends Dialog {
    @BindView(R.id.cancel)
    RadioButton cancel;
    @BindView(R.id.go_on)
    RadioButton goOn;


    public RadioButton getGoOn() {
        return goOn;
    }

    public MyDialog(@NonNull Context context) {
        super(context, R.style.myProgressDialog);
        setContentView(R.layout.dialog_up);
        ButterKnife.bind(this);
        setCancelable(false);
        setCanceledOnTouchOutside(false);
    }

    @OnClick({R.id.cancel})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.cancel:
                dismiss();
                break;
        }
    }
}

style:

<style name="myDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
</style>


<style name="myProgressDialog" parent="@style/myDialog">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
</style>

2.根本Android版本申请notification的权限,发送notification(这里只有8.0的做了跳转):

XML:

<LinearLayout
    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:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btn_add_shortcut"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_chainStyle="packed"/>

</LinearLayout>
public class Item extends AppCompatActivity {

    @BindView(R.id.btn_add_shortcut)
    TextView action;

    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        //检查权限
        if (Build.VERSION.SDK_INT < 26 && Build.VERSION.SDK_INT > 19) {
            permissionDialog();
        }
    }


    //点击弹出Notification
    @OnClick(R.id.btn_add_shortcut)
    public void onViewClicked() {
        JELLY_BEAN_MR1();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            eight(this);
        }
    }




    //请求开启通知权限的Dialog
    private void permissionDialog() {
        final MyDialog dialog = new MyDialog(this);
        dialog.show();
        dialog.getGoOn().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
                Intent intent = new Intent();
                intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                Uri uri = Uri.fromParts("package", Item.this.getPackageName(), null);
                intent.setData(uri);
                startActivity(intent);
            }
        });
    }


    //判断Notification是否已经开启
    private void checkNotifacton() {
        NotificationManagerCompat compat = NotificationManagerCompat.from(this);
        boolean isopen = compat.areNotificationsEnabled();
        if (!isopen) {
            permissionDialog();
        }
    }


    //  <8.0
    private void JELLY_BEAN_MR1() {
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setContentTitle("白丁")
                .setContentText("这是内容")
                .setSmallIcon(R.mipmap.ic_them_icon)
                .setCategory(NotificationCompat.CATEGORY_MESSAGE)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_them_icon))
                .setPriority(NotificationCompat.PRIORITY_MAX)//优先级
                .setWhen(System.currentTimeMillis())
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)//不论屏幕是否关闭都接收通知
                .setAutoCancel(true)
                .setDefaults(NotificationCompat.DEFAULT_LIGHTS);
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        manager.notify(10, builder.build());
    }

    // =8.0
    @RequiresApi(api = Build.VERSION_CODES.O)
    public void eight(Context context) {
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationChannel channel = new NotificationChannel("1", "來自白丁消息", NotificationManager.IMPORTANCE_HIGH);
        channel.setShowBadge(true);
        notificationManager.createNotificationChannel(channel);
        Intent intent = new Intent(Item.this, TestActivity.class);//跳转页面
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
        int notificationId = 0x1234;
        Notification.Builder builder = new Notification.Builder(context, "1");
        builder.setSmallIcon(R.mipmap.ic_them_icon)
                .setChannelId("1")
                .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_baiding_icon))
                .setContentText("这是内容")
                .setAutoCancel(true)//点击消失
                .setContentIntent(pendingIntent)
                .setContentTitle("这是标题");
        notificationManager.notify(notificationId, builder.build());
    }
}

3.跳转的页面是:

public class TestActivity extends AppCompatActivity {

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

猜你喜欢

转载自blog.csdn.net/qq_41873558/article/details/81630643