Java开发普通蓝牙,报错,提示如下:
警告: [deprecation] Intent中的<T>getParcelableExtra(String)已过时
BluetoothDevice device1 = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
^
其中, T是类型变量:
T扩展已在方法 <T>getParcelableExtra(String)中声明的Parcelable
问有什么办法代替?
这只是警告,并不影响运行。getParcelableExtra在33过时:
BluetoothDevice device1;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
device1 = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE,BluetoothDevice.class);
}else {
device1 = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
}
其实你点进去看源码,就知道替代方法是什么了。
一般java 方法过时后,会在注释上出现一行字,告诉你新的替代类或者替代方法是什么,我刚查了一下gpt,说 建议使用getParcelableExtra(String, ClassLoader)
方法来代替。
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE, getClass().getClassLoader());
== 或者你不想用新的方法,你直接在你的这个方法体的上面加个忽略注解@SuppressWarnings("deprecation")
==
回答:
在Java开发普通蓝牙时使用getParcelableExtra方法时,如果遇到已过时的问题,可以使用getParcelableExtra(String name, Creator creator)方法来代替。
具体解决方案如下:
1.先定义一个Parcelable的实现类:
public class BlueToothDevice implements Parcelable { //定义需要的属性和方法,参考BluetoothDevice类 //重载Parcelable接口所需的方法 @Override public int describeContents() { return 0; }
@Override
public void writeToParcel(Parcel dest, int flags) {
//将需要传递的属性写入Parcel对象
//参考BluetoothDevice类的 writeToParcel 方法
}
public static final Creator<BlueToothDevice> CREATOR = new Creator<BlueToothDevice>() {
public BlueToothDevice createFromParcel(Parcel in) {
//返回一个新的BlueToothDevice对象,和writeToParcel 方法中添加的属性对应
}
public BlueToothDevice[] newArray(int size) {
return new BlueToothDevice[size];
}
};
}
2.在发送广播时,将需要传递的Parcelable对象放入Intent中:
Intent intent = new Intent("com.example.bluetooth.ACTION_FOUND"); BlueToothDevice device = new BlueToothDevice(); //设置device的属性 intent.putExtra("device", device);
3.在接收广播时,从Intent中取出Parcelable对象:
Parcelable parcelable = intent.getParcelableExtra("device"); if (parcelable != null && parcelable instanceof BlueToothDevice) { BlueToothDevice device = (BlueToothDevice) parcelable; //使用device的属性 }
如果你不想自己定义一个Parcelable类,也可以从官方提供的BluetoothDevice类中取出数据,如下所示:
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); if (device != null) { String name = device.getName(); String address = device.getAddress(); //使用name和address }
综上所述,已过时的getParcelableExtra方法可以使用getParcelableExtra(String name, Creator creator)方法来代替。如果需要自己定义Parcelable类,可以参考上面给出的示例代码。如果不想自己定义Parcelable类,也可以从BluetoothDevice类中取出数据。