📅  最后修改于: 2023-12-03 15:29:22.373000             🧑  作者: Mango
在 Android 应用中,通知功能可以是一个非常有用的工具,它可以帮助应用向用户发送各种信息和提醒,甚至可以在用户离开应用后继续向其发送提醒。在本篇文章中,我们将介绍 Android 应用中通知功能的实现方法,并提供一个通知功能的示例供程序员参考。
Android 中通知功能的实现需要用到 NotificationManager 和 NotificationCompat 两个类。NotificationManager 负责发送通知消息,而 NotificationCompat 则是用于构建通知消息的工具类。下面是构建一个简单通知功能的代码示例:
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.media.RingtoneManager;
import android.net.Uri;
import androidx.core.app.NotificationCompat;
public class NotificationUtils {
public static void createNotification(Context context, String title, String message, Class<?> activity) {
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
int notificationId = 1;
String channelId = "channel-01";
String channelName = "Channel Name";
int importance = NotificationManager.IMPORTANCE_HIGH;
Intent intent = new Intent(context, activity);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId)
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher_round))
.setContentTitle(title)
.setContentText(message)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationChannel mChannel = new NotificationChannel(
channelId, channelName, importance);
notificationManager.createNotificationChannel(mChannel);
}
notificationManager.notify(notificationId, builder.build());
}
}
上述代码中,我们首先获取了 NotificationManager 的实例,然后创建了一个通知消息。我们使用 NotificationCompat.Builder 来构建通知消息,并设置了通知的标题、内容、小图标、大图标、声音和点击行为等属性。PendingIntent.getActivity()
用于从通知消息中启动目标 Activity。如果您需要创建一个带有自定义视图的通知消息,还可以使用 NotificationCompat.Builder
的 setCustomContentView()
和 setCustomBigContentView()
方法来实现。
接下来,我们将基于上述实现方法编写一个简单的通知功能示例。该示例可以在用户离开应用时向其发送一条通知消息,并在用户点击通知消息时返回应用。下面是示例代码:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Button mSendButton;
private EditText mMessageEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSendButton = findViewById(R.id.send_button);
mMessageEditText = findViewById(R.id.message_edit_text);
mSendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String message = mMessageEditText.getText().toString();
if (!message.isEmpty()) {
NotificationUtils.createNotification(MainActivity.this, "New message", message, MainActivity.class);
Toast.makeText(MainActivity.this, "Message sent", Toast.LENGTH_SHORT).show();
}
}
});
}
}
上述示例代码中,我们在 MainActivity 中定义了一个 EditText
和一个 Button
用于发送通知消息。当用户点击发送按钮时,我们获取用户输入的消息,并使用 NotificationUtils.createNotification()
方法创建一条通知消息。该方法会在用户离开应用时向其发送一条通知消息,并在用户点击通知消息时返回应用。注意,在使用通知功能时,您需要在 AndroidManifest.xml 文件中声明通知权限:
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
至此,我们已经完成了 Android 应用中通知功能的实现,并提供了一个通知功能的示例供程序员参考。使用通知功能可以帮助您向用户发送各种信息和提醒,从而增强应用的交互性、用户体验和用户参与度。