在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);
}
}