Importing files from local storage in PSLab Android application

This blog demonstrates how a user can import log files from local storage to the PSLab Android application for various instruments and play them. This functionality is really useful as users can share their log files and import them in their app. This blog mostly consists of my work in the PSLab Android repository. How to access local storage files? We here use the concept of implicit intent to access the local storage of the device and then generate the file from the received data URI. Implicit intents differ from explicit intents in a way that, they don’t give exact class or activity to be initialized through the intent, instead they provide the action to be performed and the class or activities are selected implicitly from the required action The code block is shown below.  private void selectFile() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); startActivityForResult(intent, 100); } Here the Intent.ACTION_GET_CONTENT defines implicit intent. This intent opens the activity related to the action of GETTING CONTENT. The type of content is specified in the Intent.setType(<TYPE>). Since here the type is set to “*/*”, it will open all types of files. If we want only images we can set Type to “images”. startActivityForResult(intent, <REQUEST_CODE>) starts the file selection activity.  How to generate a file from received URI? Once the user selects a file from the file selection activity we can generate the selected file from the data passed in the callback function of startActivityForResult(). The data intent passed as a parameter to onActivityResult() callback contains data for the selected file. We can retrieve path, name, etc details of the selected file from this data intent. The code block for the same is given below. @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { if (requestCode == 100) { if (resultCode == RESULT_OK) { Uri uri = data.getData(); String path = uri.getPath(); path = path.replace("/root_path/", "/"); File file = new File(path); getFileData(file); } else Toast.makeText(this, this.getResources().getString(R.string.no_file_selected), Toast.LENGTH_SHORT).show(); } } Here we check for the requestCode, which we passed when calling the startActivityForResult() function. We further check if the result is valid and then generate the file from the file path we received in the data Intent. Once we get the path we can get the selected file using the following lines of code: String path = uri.getPath(); path = path.replace("/root_path/", "/"); File file = new File(path); How to get Data from the file? Once the file is generated, it is passed to a function getFileData(File file) to get data in the file to add to the logs of the selected device.  The main part of the getFileData function is given below. FileInputStream is = new FileInputStream(file); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line = reader.readLine(); int i = 0; long block = 0, time = 0; while (line != null) { if (i != 0) { String[] data = line.split(","); try { time += 1000; BaroData baroData = new BaroData(time, block, Float.valueOf(data[2]), Double.valueOf(data[3]), Double.valueOf(data[4])); realm.beginTransaction(); realm.copyToRealm(baroData); realm.commitTransaction(); } catch…

Continue ReadingImporting files from local storage in PSLab Android application