PreferenceManager.GetDefaultSharedPreferences(Context?) 已过时:已弃用
PreferenceManager.GetDefaultSharedPreferences(Context?) is obsolete: deprecated
我最近更新了我的 Android 项目中的 nugget 包,现在我在这行代码中收到一条消息:
ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(Application.Context);
CS0618:PreferenceManager.GetDefaultSharedPreferences(上下文?)已过时:已弃用
enter image description here
有必要改变什么吗?我的代码不会像这样正常工作吗?我应该完全删除 private void storeToken(String token) 吗?我不确定我是否还需要 private void storeToken(String token).
using System;
using Android.App;
using Android.Content;
using Android.Util;
using Firebase.Messaging;
using System.Collections.Generic;
using Android.Preferences;
using Android.Media;
using AndroidX.Core.App;
namespace AndroidVersion
{
[Service]
[IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
public class MyFirebaseMessagingService : FirebaseMessagingService
{
const string TAG = "MyFirebaseMsgService";
public override void OnNewToken(string token)
{
Log.Debug(TAG, "Refreshed token: " + token);
storeToken(token);
}
private void storeToken(String token)
{
//saving the token on shared preferences
ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(Application.Context);
ISharedPreferencesEditor editor = prefs.Edit();
editor.PutString("my_token", token);
editor.Apply();
}
public override void OnMessageReceived(RemoteMessage message)
{
Log.Debug(TAG, "From: " + message.From);
var body = message.GetNotification().Body;
var title = message.GetNotification().Title;
Log.Debug(TAG, "Notification Message Body: " + message.GetNotification().Body);
SendNotification(body, title, message.Data);
}
void SendNotification(string messageBody, string Title, IDictionary<string, string> data)
{
var intent = new Intent(this, typeof(Activity1));
intent.AddFlags(ActivityFlags.ClearTop);
foreach (var key in data.Keys)
{
intent.PutExtra(key, data[key]);
}
var pendingIntent = PendingIntent.GetActivity(this,
Activity1.NOTIFICATION_ID,
intent,
PendingIntentFlags.OneShot);
var notificationBuilder = new NotificationCompat.Builder(this, Activity1.CHANNEL_ID)
.SetSmallIcon(Resource.Drawable.Icon)
.SetContentTitle(Title)
.SetContentText(messageBody)
.SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification))
.SetVibrate(new long[] { 1000, 1000, 0, 0, 0 })
.SetLights(Android.Graphics.Color.Red, 3000, 3000)
.SetPriority((int)NotificationPriority.High)
.SetAutoCancel(true)
.SetContentIntent(pendingIntent);
var notificationManager = NotificationManagerCompat.From(this);
notificationManager.Notify(Activity1.NOTIFICATION_ID, notificationBuilder.Build());
}
}
}
是的,它已被弃用。使用 AndroidX 偏好库在所有设备上实现一致的行为。
您可以使用 PreferenceManager 的 AndroidX 支持库版本,即 androidx.preference.PreferenceManager
而不是 android.preference.PreferenceManager.
记得将以下内容添加到您的build.gradle。
implementation 'androidx.preference:preference:1.1.1'
使用using AndroidX.Preference;
代替using Android.Preferences;
我用implementation 'androidx.preference:preference-ktx:1.1.1'
在我的项目
中成功替换了已弃用的 android.preference.PreferenceManager
我最近更新了我的 Android 项目中的 nugget 包,现在我在这行代码中收到一条消息:
ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(Application.Context);
CS0618:PreferenceManager.GetDefaultSharedPreferences(上下文?)已过时:已弃用
enter image description here
有必要改变什么吗?我的代码不会像这样正常工作吗?我应该完全删除 private void storeToken(String token) 吗?我不确定我是否还需要 private void storeToken(String token).
using System;
using Android.App;
using Android.Content;
using Android.Util;
using Firebase.Messaging;
using System.Collections.Generic;
using Android.Preferences;
using Android.Media;
using AndroidX.Core.App;
namespace AndroidVersion
{
[Service]
[IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
public class MyFirebaseMessagingService : FirebaseMessagingService
{
const string TAG = "MyFirebaseMsgService";
public override void OnNewToken(string token)
{
Log.Debug(TAG, "Refreshed token: " + token);
storeToken(token);
}
private void storeToken(String token)
{
//saving the token on shared preferences
ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(Application.Context);
ISharedPreferencesEditor editor = prefs.Edit();
editor.PutString("my_token", token);
editor.Apply();
}
public override void OnMessageReceived(RemoteMessage message)
{
Log.Debug(TAG, "From: " + message.From);
var body = message.GetNotification().Body;
var title = message.GetNotification().Title;
Log.Debug(TAG, "Notification Message Body: " + message.GetNotification().Body);
SendNotification(body, title, message.Data);
}
void SendNotification(string messageBody, string Title, IDictionary<string, string> data)
{
var intent = new Intent(this, typeof(Activity1));
intent.AddFlags(ActivityFlags.ClearTop);
foreach (var key in data.Keys)
{
intent.PutExtra(key, data[key]);
}
var pendingIntent = PendingIntent.GetActivity(this,
Activity1.NOTIFICATION_ID,
intent,
PendingIntentFlags.OneShot);
var notificationBuilder = new NotificationCompat.Builder(this, Activity1.CHANNEL_ID)
.SetSmallIcon(Resource.Drawable.Icon)
.SetContentTitle(Title)
.SetContentText(messageBody)
.SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification))
.SetVibrate(new long[] { 1000, 1000, 0, 0, 0 })
.SetLights(Android.Graphics.Color.Red, 3000, 3000)
.SetPriority((int)NotificationPriority.High)
.SetAutoCancel(true)
.SetContentIntent(pendingIntent);
var notificationManager = NotificationManagerCompat.From(this);
notificationManager.Notify(Activity1.NOTIFICATION_ID, notificationBuilder.Build());
}
}
}
是的,它已被弃用。使用 AndroidX 偏好库在所有设备上实现一致的行为。
您可以使用 PreferenceManager 的 AndroidX 支持库版本,即 androidx.preference.PreferenceManager
而不是 android.preference.PreferenceManager.
记得将以下内容添加到您的build.gradle。
implementation 'androidx.preference:preference:1.1.1'
使用using AndroidX.Preference;
代替using Android.Preferences;
我用implementation 'androidx.preference:preference-ktx:1.1.1'
在我的项目
android.preference.PreferenceManager