मैं क्या गलत कर रहा हूं? साझा करने के लिए BluetoothDevice के ArrayList को सहेजना - एंड्रॉइड, ब्लूटूथ, साझा संदर्भ, एंड्रॉइड-ब्लूटूथ, एंड्रॉइड-साझा संदर्भ

मैं वर्तमान में ब्लूटूथ उपकरणों को नियंत्रित करने के लिए एंड्रॉइड एप्लिकेशन लिख रहा हूं। मैं एक को बचाने की कोशिश कर रहा हूँ ArrayList<BluetoothDevice> सेवा मेरे SharedPreferences जीसन और जेसन कक्षाओं का उपयोग करते हुए, लेकिन जब मैं कोशिश करता हूंमेरे फोन पर इस कोड का कोड चला रहा है, मुझे प्रत्येक डिवाइस का नाम नहीं मिल सकता है लेकिन मुझे उनके पते मिल सकते हैं। मुझे एंड्रॉइड मॉनिटर लॉग (एंड्रॉइड स्टूडियो का उपयोग करके) में यह त्रुटि दिखाई देती है:

03-28 16: 12: 51.706 17640-17640 /? ई / ब्लूटूथडिवाइस: बीटी सक्षम नहीं है। दूरस्थ डिवाइस नाम नहीं मिल सकता है

मैं उपकरणों की सूची का प्रबंधन करने के लिए एक कस्टम क्लास का उपयोग कर रहा हूं, यहां प्रासंगिक कोड है:

public class DeviceList {

private ArrayList<BluetoothDevice> mDeviceList_bt;
private ArrayList<String> mDeviceList_s;

private ArrayAdapter mAdapter;

private String PREFS_NAME;

SharedPreferences mPrefs;
SharedPreferences.Editor mEditor;

private int i = 0;

public DeviceList(Context c, String Prefs_Name){

this.PREFS_NAME = Prefs_Name;

mDeviceList_bt = new ArrayList<BluetoothDevice>();
mDeviceList_s = new ArrayList<String>();

mPrefs = PreferenceManager.getDefaultSharedPreferences(c);
mEditor = mPrefs.edit();

mAdapter = new ArrayAdapter(c, android.R.layout.simple_list_item_1, mDeviceList_s);
}

public void readFromSharedPrefs(){

Gson gson = new Gson();
String json = mPrefs.getString(PREFS_NAME, null);
Type type = new TypeToken<ArrayList<BluetoothDevice>>() {}.getType();
mDeviceList_bt = gson.fromJson(json, type);

for (BluetoothDevice device : mDeviceList_bt) {
mDeviceList_s.add(device.getName() + "n" + device.getAddress());
}

mAdapter.notifyDataSetChanged();
}

public void saveToSharedPrefs(){
Gson gson = new Gson();
String json = gson.toJson(mDeviceList_bt); // myObject - instance of MyObject
mEditor.putString(PREFS_NAME, json);
mEditor.commit();
}

उदाहरण के लिए, यदि मैं इन 3 उपकरणों के साथ सूची को सहेजता हूं:

DeviceName1
8C:DE:52:FA:96:0A

DeviceName2
00:3E:01:00:47:4E

DeviceName3
8C:DE:52:FA:B5:F0

मुझे पढ़ने के बाद यह मिलता है SharedPreferences :

null
8C:DE:52:FA:96:0A

null
00:3E:01:00:47:4E

null
8C:DE:52:FA:B5:F0

कोई आइडिया है कि मैं क्या गलत कर रहा हूँ?

आपका अग्रिम में ही बहुत धन्यवाद!

उत्तर:

उत्तर № 1 के लिए 1

डिवाइस का नाम BluetoothDevice में सहेजा नहीं गया है। इसके बजाय ब्लूटूथ सेवा में नाम कैश किया गया है:

/**
* Get the friendly Bluetooth name of the remote device.
*
* <p>The local adapter will automatically retrieve remote names when
* performing a device scan, and will cache them. This method just returns
* the name for this device from the cache.
* <p>Requires {@link android.Manifest.permission#BLUETOOTH}
*
* @return the Bluetooth name, or null if there was a problem.
*/
public String getName() {
if (sService == null) {
Log.e(TAG, "BT not enabled. Cannot get Remote Device name");
return null;
}
try {
return sService.getRemoteName(this);
} catch (RemoteException e) {Log.e(TAG, "", e);}
return null;
}

ऐसा लगता है कि आपकी deserialised ब्लूटूथडिवाइस हैंउचित रूप से प्रारंभ नहीं किया गया (ब्लूटूथ सेवा से कनेक्ट नहीं है)। आप वरीयताओं में केवल मैक पता (और डिवाइस का नाम) बचा सकते हैं। फिर आप इसका उपयोग कर सकते हैं

BluetoothDevice device = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(macAddress);

एक उचित प्रारंभिक डिवाइस प्राप्त करने के लिए।

ध्यान रखें कि आप समस्याओं में भाग ले सकते हैं क्योंकि आईओएस और एंड्रॉइड डिवाइस कुछ समय बाद अपना मैक पता बदल सकते हैं।


संबंधित सवाल
सबसे लोकप्रिय