Skip to content

Instantly share code, notes, and snippets.

@JakeSteam
Last active February 12, 2019 02:36
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save JakeSteam/459db1f41f1d0089530181c86faf19eb to your computer and use it in GitHub Desktop.
Save JakeSteam/459db1f41f1d0089530181c86faf19eb to your computer and use it in GitHub Desktop.
"Android: Importing Levels From QR Codes (Camera / File)" for GameDevAlgorithms.com
compile 'com.github.aitorvs:allowme:0.3.2'
compile 'com.google.android.gms:play-services-vision:10.0.1'
public void importFromCamera(View v) {
try {
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, INTENT_CAMERA);
} catch (Exception e) {
Toast.makeText(this, "Scanning QR codes requires a barcode reader to be installed!", Toast.LENGTH_SHORT).show();
Uri marketUri = Uri.parse("market://details?id=com.google.zxing.client.android");
Intent marketIntent = new Intent(Intent.ACTION_VIEW, marketUri);
startActivity(marketIntent);
}
}
public void importFromFile(View v) {
PermissionHelper.runIfPossible(Manifest.permission.READ_EXTERNAL_STORAGE, new Runnable() {
@Override
public void run() {
importFromFile();
}
});
}
private void importFromFile() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), INTENT_FILE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
String puzzleString = "";
if (requestCode == INTENT_CAMERA) {
puzzleString = data.getStringExtra("SCAN_RESULT");
} else if (requestCode == INTENT_FILE) {
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData());
puzzleString = StorageHelper.readQRImage(this, bitmap);
} catch (Exception e) {
AlertHelper.error(this, AlertHelper.getError(AlertHelper.Error.FILE_IMPORT_FAIL));
}
} activity
if (!puzzleString.equals("") && PuzzleShareHelper.importPuzzleString(puzzleString, false)) {
GooglePlayHelper.UpdateEvent(Constants.EVENT_IMPORT_PUZZLE, 1);
AlertHelper.success(this, Text.get("ALERT_PUZZLE_IMPORTED"));
populatePuzzles();
} else if (requestCode == INTENT_CAMERA) {
AlertHelper.error(this, AlertHelper.getError(AlertHelper.Error.CAMERA_IMPORT_FAIL));
} else if (requestCode == INTENT_FILE) {
AlertHelper.error(this, AlertHelper.getError(AlertHelper.Error.FILE_IMPORT_FAIL));
}
}
}
import com.aitorvs.android.allowme.AllowMe;
import com.aitorvs.android.allowme.AllowMeCallback;
import com.aitorvs.android.allowme.PermissionResultSet;
public class PermissionHelper {
public static void runIfPossible(final String permission, final Runnable callback) {
if (!AllowMe.isPermissionGranted(permission)) {
new AllowMe.Builder()
.setPermissions(permission)
.setCallback(new AllowMeCallback() {
@Override
public void onPermissionResult(int requestCode, PermissionResultSet result) {
if (result.isGranted(permission)) {
callback.run();
}
}
})
.request(123);
} else {
callback.run();
}
}
}
public static String readQRImage(Activity activity, Bitmap bitmap) {
String contents = "";
BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(activity)
.setBarcodeFormats(Barcode.QR_CODE)
.build();
SparseArray<Barcode> detectedBarcodes = barcodeDetector.detect(new Frame.Builder()
.setBitmap(bitmap)
.build());
if (detectedBarcodes.size() > 0 && detectedBarcodes.valueAt(0) != null) {
contents = detectedBarcodes.valueAt(0).rawValue;
}
return contents;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment