1-) Android RMOS - zxing barkod ve QR okuma
1-) Android RMOS - build.gradle(Module: app)'a aşağıdakini ekle
dependencies {
...
implementation 'com.journeyapps:zxing-android-embedded:3.2.0@aar'//Add dependency
implementation 'com.google.zxing:core:3.2.1'
}
2-) barkod ekranının yan dönmemesi için aşağıdaki clası oluştur
package com.example.pethoalpar.zxingexample.ZxingLibrary;
import com.journeyapps.barcodescanner.CaptureActivity;
public class CaptureActivityPortrait extends CaptureActivity {
// burası boş kalacak
}
3-) barkod ekranının yan dönmemesi için manifeste ekle
<activity
android:name=".ZxingLibrary.CaptureActivityPortrait"
android:screenOrientation="portrait"
android:stateNotNeeded="true"
android:theme="@style/Theme.AppCompat.NoActionBar"
android:windowSoftInputMode="stateAlwaysHidden">
</activity>
4-) MainActivity.java da çalıştıracağın kod aşağıdadır
button = (Button) this.findViewById(R.id.button);
final Activity activity = this;
Toast.makeText(this, "Main", Toast.LENGTH_LONG).show();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
IntentIntegrator integrator = new IntentIntegrator(activity);
integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
integrator.setPrompt("Scan");
integrator.setCameraId(0);
integrator.setBeepEnabled(false);
integrator.setBarcodeImageEnabled(false);
integrator.setCaptureActivity(CaptureActivityPortrait.class); // barcod ekranını yan çevirmek istiyorsan bunu kullanma
integrator.initiateScan();
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
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();
}
} else {
// This is important, otherwise the result will not be passed to the fragment
super.onActivityResult(requestCode, resultCode, data);
}
}
5-) Açıklama
Barkod'dan aldığın sonuç onActivityResult metoduna düşer. Yani onCreate metodunu tekrardan yüklemez. Sadece barcod sonucunu alır onActivityResult metodundan devam eder. Bu sayede onCreate sadece 1 kere tetiklenmiş olur.
6-) Fragmentte göndermek için
public class NfcMainFragment extends Fragment {
public static NfcMainFragment nfcMainFragment = null;
public void setNfcText(String text) {
txtNfc.setText(text);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
nfcMainFragment = this;
}
---mainactiviyden fragmente göndermek---
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if(result != null) {
if(result.getContents() == null) {
Toast.makeText(getApplicationContext(), "İptal edildi", Toast.LENGTH_LONG).show();
} else {
if(NfcMainFragment.nfcMainFragment!=null){
String text=result.getContents();
Toast.makeText(getApplicationContext(), "QR-BARCODE OKUNDU!: " + text, Toast.LENGTH_LONG).show();
NfcMainFragment.nfcMainFragment.setNfcText(text);
}
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
5-) MainActivity.java'nın hepsi aşağıdadır
package com.example.pethoalpar.zxingexample;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.example.pethoalpar.zxingexample.ZxingLibrary.CaptureActivityPortrait;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
public class MainActivity extends AppCompatActivity {
private Button button;
// zxing
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) this.findViewById(R.id.button);
final Activity activity = this;
Toast.makeText(this, "Main", Toast.LENGTH_LONG).show();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
IntentIntegrator integrator = new IntentIntegrator(activity);
integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
integrator.setPrompt("Scan");
integrator.setCameraId(0);
integrator.setBeepEnabled(false);
integrator.setBarcodeImageEnabled(false);
integrator.setCaptureActivity(CaptureActivityPortrait.class); // barcod ekranını yan çevirmek istiyorsan bunu kullanma
integrator.initiateScan();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
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();
}
} else {
// This is important, otherwise the result will not be passed to the fragment
super.onActivityResult(requestCode, resultCode, data);
}
}
}
5-) activity_main.xml'in hepsi aşağıdadır
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.pethoalpar.zxingexample.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"/>
</RelativeLayout>