I have a problem with FAT12 file system support. I'm trying to read/write XML file on 2Mb memory device. This device is formatted in FAT12. In a good case first, I found a path by using broadcast receiver when I plug my android device and then create file like this:
public ConfigToXMLTask(String filename, Context context) { this.file = new File(filename); this.context = context; } @Override protected File doInBackground(MainConfig... params){ DocumentBuilderFactory xmlFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder xmlBuilder = xmlFactory.newDocumentBuilder(); Document doc = xmlBuilder.newDocument(); Element rootElement = doc.createElement("document"); rootElement.setAttribute("ppk", config.getDeviceName()); rootElement.setAttribute("ver", "01"); rootElement.setAttribute("rev", "00"); doc.appendChild(rootElement); config.buildXMLElement(rootElement); Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "yes"); transformer.setOutputProperty(OutputKeys.ENCODING, "Windows-1251"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); file.createNewFile(); transformer.transform(new DOMSource(doc), new StreamResult(new FileOutputStream(file))); } The problem is that on some android devices access to my 2Mb flash drive not available and broadcast receiver doesn't work. Here is a code of receiver: private UsbReceiver receiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); receiver = new UsbReceiver(); filter = new IntentFilter(); filter.addAction(Intent.ACTION_MEDIA_MOUNTED); filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED); filter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL); filter.addDataScheme("file"); registerReceiver(receiver, filter); } public static class UsbReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_MEDIA_MOUNTED)) { Uri uriFile = intent.getData(); File dir = new File(uriFile.getPath()); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); prefs.edit().putString("usb", uriFile.getPath()).apply(); if (dir.canRead()) { String[] fileList = dir.list(); for (String aFileList : fileList) { if (aFileList.contains("CONFIG.XML")) { final File config = new File(dir, aFileList); prefs.edit().putString("dir", dir.getPath()).apply(); new AlertDialog.Builder(context) .setTitle(R.string.attention) .setMessage(R.string.device_detected) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MyXMLParser.convertXMLtoConfig(config, context); } }) .setNegativeButton(android.R.string.cancel, null) .show(); } } } } } } @Override protected void onResume() { registerReceiver(receiver, filter); wheel.startAnimation(wheel.getAnimation()); super.onResume(); } @Override protected void onPause() { unregisterReceiver(receiver); super.onPause(); } Default file managers can read files, but I haven't found good solutions for reading (or receiving access to write/reading) files from USB OTG. Maybe there is some library based on documentation https://developer.android.com/guide/topics/connectivity/usb/host.html for FAT12? Please give me an answer or a link to the source in which there is a description or examples. -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. To post to this group, send email to android-developers@googlegroups.com. Visit this group at https://groups.google.com/group/android-developers. To view this discussion on the web visit https://groups.google.com/d/msgid/android-developers/3d83a5ad-906e-4277-824f-94976c1290b9%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.