Позвольте мне объяснить, как я недавно внедрил сканер штрих-кода в своем приложении. Мое требование состоит в том, чтобы мои пользователи, которые хотят продавать свои книги через мое приложение, будут сканировать штрих-код на задней обложке своей книги (если она доступна). Как только сканер завершит сканирование, он вернет номер ISBN, сохраненный в штрих-коде. Теперь я должен опубликовать этот номер ISBN в веб-сервисе, который вернет полные данные об этой книге в формате JSON. Теперь я буду анализировать JSON и заполнять мои представления данными, возвращаемыми веб-сервисом.
Теперь в вашем случае вы хотите отсканировать штрих-код, который будет возвращать номер (может быть идентификатором актива), и вы хотите опубликовать этот номер в базе данных или что-то еще (это мое понимание. Если что-то я пропустил, пожалуйста, прокомментируйте ). Теперь просто выполните следующие шаги, чтобы сделать это:
Добавление зависимостей:
Сначала добавьте зависимости штрих-кода в файл уровня приложения build.gradle. Как это:
implementation 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
implementation 'com.google.zxing:core:3.2.1'
Я надеюсь, что вы уже сделали это.
Объявление файла общих настроек:
Теперь объявляйте Shared Preference и Shared Preference файл с любым именем по вашему выбору. Как это:
SharedPreferences sharedPreferences;
public static final String mypreference = "mypref";
Это должно быть сделано в вашем основном классе до onCreate()
метода.
Добавить кнопку для запуска сканера штрих-кода:
Теперь добавьте кнопку в нужное место, откуда вы хотите запустить сканер штрих-кода. Помните, что ваш результат от штрих-кода будет возвращен к этой деятельности. Как это:
Button barcodeBtn = findViewById(R.id.barcodeBtn);
barcodeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
IntentIntegrator integrator = new IntentIntegrator(MainActivity.this);
integrator.setPrompt("Scan the barcode on the asset");
integrator.setCameraId(0); // Use a specific camera of the device
integrator.setOrientationLocked(true);
integrator.setBeepEnabled(true);
integrator.setCaptureActivity(CaptureActivityPortrait.class);
integrator.initiateScan();
}
}
Получение отсканированного идентификатора актива и сохранение в общем предпочтении:
Как только вы нажмете кнопку сканера, вы увидите, что сканер штрих-кода открыт, и вы можете сканировать штрих-код. После завершения сканирования сканер вернет идентификатор отсканированного актива хосту. Теперь вам нужно захватить идентификатор ресурса и сохранить его в общем файле настроек. Как это:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
final IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if(result != null) {
if(result.getContents() == null) {
Log.d("MainActivity", "Cancelled scan");
Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
} else {
Log.d("MainActivity", "Scanned");
Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
// This is where you are saving the scanned asset ID in the shared preference file.
sharedpreferences = getActivity().getSharedPreferences("mypref", 0); // 0 - for private mode
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString("assetID", result.getContents());
editor.apply();
}
} else {
// This is important, otherwise the result will not be passed to the fragment
super.onActivityResult(requestCode, resultCode, data);
}
}
Использование значения, сохраненного в предпочтении Shared:
Теперь вы получили идентификатор актива из сканера штрих-кода и сохранили его в общем файле настроек с именем переменной assetID
. Помните, что это значение доступно для всех действий в вашем приложении. Вы можете извлечь значение, хранящееся в assetID
, из любого места, например:
sharedpreferences = getActivity().getSharedPreferences("mypref", 0); // 0 - for private mode
String assetID= sharedpreferences.getString(assetID, "0");
В следующий раз, когда вы откроете сканер штрих-кода и отсканируете другой штрих-код, значение, сохраненное в assetID, будет заменено новым идентификатором актива.
Надеюсь, это поможет:)