Created
August 29, 2017 13:28
-
-
Save ewanharris/f524cf9758b0b2fac540c60c4f4acd1e to your computer and use it in GitHub Desktop.
ti.barcode example + permissions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* In this example, we'll use the Barcode module to display some information about | |
* the scanned barcode. | |
*/ | |
var Barcode = require('ti.barcode'); | |
Barcode.allowRotation = true; | |
Barcode.displayedMessage = ' '; | |
Barcode.allowMenu = false; | |
Barcode.allowInstructions = false; | |
Barcode.useLED = true; | |
var window = Ti.UI.createWindow({ | |
backgroundColor: 'white' | |
}); | |
var scrollView = Ti.UI.createScrollView({ | |
contentWidth: 'auto', | |
contentHeight: 'auto', | |
top: 0, | |
showVerticalScrollIndicator: true, | |
layout: 'vertical' | |
}); | |
var permButton = Ti.UI.createButton({title: 'get perms', width: '100%', height: '40dp'}); | |
permButton.addEventListener('click', function(e) { | |
var permissions = ['android.permission.CAMERA', | |
'android.permission.WRITE_EXTERNAL_STORAGE', | |
'android.permission.READ_EXTERNAL_STORAGE']; | |
for (var permission of permissions) { | |
if (!Ti.Android.hasPermission(permission)) { | |
Ti.Android.requestPermissions(permissions, function(e) { | |
if (e.success) { | |
console.log('ok'); | |
} | |
}); | |
return; | |
} | |
} | |
}); | |
window.add(permButton) | |
/** | |
* Create a chrome for the barcode scanner. | |
*/ | |
var overlay = Ti.UI.createView({ | |
backgroundColor: 'transparent', | |
top: 0, right: 0, bottom: 0, left: 0 | |
}); | |
var switchButton = Ti.UI.createButton({ | |
title: Barcode.useFrontCamera ? 'Back Camera' : 'Front Camera', | |
textAlign: 'center', | |
color: '#000', backgroundColor: '#fff', style: 0, | |
font: { fontWeight: 'bold', fontSize: 16 }, | |
borderColor: '#000', borderRadius: 10, borderWidth: 1, | |
opacity: 0.5, | |
width: 220, height: 30, | |
bottom: 10 | |
}); | |
switchButton.addEventListener('click', function () { | |
Barcode.useFrontCamera = !Barcode.useFrontCamera; | |
switchButton.title = Barcode.useFrontCamera ? 'Back Camera' : 'Front Camera'; | |
}); | |
overlay.add(switchButton); | |
var cancelButton = Ti.UI.createButton({ | |
title: 'Cancel', textAlign: 'center', | |
color: '#000', backgroundColor: '#fff', style: 0, | |
font: { fontWeight: 'bold', fontSize: 16 }, | |
borderColor: '#000', borderRadius: 10, borderWidth: 1, | |
opacity: 0.5, | |
width: 220, height: 30, | |
top: 20 | |
}); | |
cancelButton.addEventListener('click', function () { | |
Barcode.cancel(); | |
}); | |
overlay.add(cancelButton); | |
/** | |
* Create a button that will trigger the barcode scanner. | |
*/ | |
var scanCode = Ti.UI.createButton({ | |
title: 'Scan Code', | |
width: 150, | |
height: 60, | |
top: 20 | |
}); | |
scanCode.addEventListener('click', function () { | |
reset(); | |
// Note: while the simulator will NOT show a camera stream in the simulator, you may still call "Barcode.capture" | |
// to test your barcode scanning overlay. | |
Barcode.capture({ | |
animate: true, | |
overlay: overlay, | |
showCancel: false, | |
showRectangle: false, | |
keepOpen: true/*, | |
acceptedFormats: [ | |
Barcode.FORMAT_QR_CODE | |
]*/ | |
}); | |
}); | |
scrollView.add(scanCode); | |
/** | |
* Create a button that will show the gallery picker. | |
*/ | |
var scanImage = Ti.UI.createButton({ | |
title: 'Scan Image from Gallery', | |
width: 150, height: 60, top: 20 | |
}); | |
scanImage.addEventListener('click', function () { | |
reset(); | |
Ti.Media.openPhotoGallery({ | |
success: function (evt) { | |
Barcode.parse({ | |
image: evt.media/*, | |
acceptedFormats: [ | |
Barcode.FORMAT_QR_CODE | |
]*/ | |
}); | |
} | |
}); | |
}); | |
scrollView.add(scanImage); | |
/** | |
* Now listen for various events from the Barcode module. This is the module's way of communicating with us. | |
*/ | |
var scannedBarcodes = {}, scannedBarcodesCount = 0; | |
function reset() { | |
scannedBarcodes = {}; | |
scannedBarcodesCount = 0; | |
cancelButton.title = 'Cancel'; | |
scanResult.text = ' '; | |
scanContentType.text = ' '; | |
scanFormat.text = ' '; | |
scanParsed.text = ' '; | |
} | |
Barcode.addEventListener('error', function (e) { | |
scanContentType.text = ' '; | |
scanFormat.text = ' '; | |
scanParsed.text = ' '; | |
scanResult.text = e.message; | |
}); | |
Barcode.addEventListener('cancel', function (e) { | |
Ti.API.info('Cancel received'); | |
}); | |
Barcode.addEventListener('success', function (e) { | |
Ti.API.info('Success called with barcode: ' + e.result); | |
if (!scannedBarcodes['' + e.result]) { | |
scannedBarcodes[e.result] = true; | |
scannedBarcodesCount += 1; | |
cancelButton.title = 'Finished (' + scannedBarcodesCount + ' Scanned)'; | |
scanResult.text += e.result + ' '; | |
scanContentType.text += parseContentType(e.contentType) + ' '; | |
scanFormat.text += e.format + ' '; | |
scanParsed.text += parseResult(e) + ' '; | |
} | |
}); | |
/** | |
* Finally, we'll add a couple labels to the window. When the user scans a barcode, we'll stick information about it in | |
* to these labels. | |
*/ | |
scrollView.add(Ti.UI.createLabel({ | |
text: 'You may need to rotate the device', | |
top: 10, | |
height: Ti.UI.SIZE || 'auto', width: Ti.UI.SIZE || 'auto' | |
})); | |
scrollView.add(Ti.UI.createLabel({ | |
text: 'Result: ', textAlign: 'left', | |
top: 10, left: 10, | |
color: 'black', | |
height: Ti.UI.SIZE || 'auto' | |
})); | |
var scanResult = Ti.UI.createLabel({ | |
text: ' ', textAlign: 'left', | |
top: 10, left: 10, | |
color: 'black', | |
height: Ti.UI.SIZE || 'auto' | |
}); | |
scrollView.add(scanResult); | |
scrollView.add(Ti.UI.createLabel({ | |
text: 'Content Type: ', | |
top: 10, left: 10, | |
textAlign: 'left', | |
color: 'black', | |
height: Ti.UI.SIZE || 'auto' | |
})); | |
var scanContentType = Ti.UI.createLabel({ | |
text: ' ', textAlign: 'left', | |
top: 10, left: 10, | |
color: 'black', | |
height: Ti.UI.SIZE || 'auto' | |
}); | |
scrollView.add(scanContentType); | |
scrollView.add(Ti.UI.createLabel({ | |
text: 'Format: ', textAlign: 'left', | |
top: 10, left: 10, | |
color: 'black', | |
height: Ti.UI.SIZE || 'auto' | |
})); | |
var scanFormat = Ti.UI.createLabel({ | |
text: ' ', textAlign: 'left', | |
top: 10, left: 10, | |
color: 'black', | |
height: Ti.UI.SIZE || 'auto' | |
}); | |
scrollView.add(scanFormat); | |
scrollView.add(Ti.UI.createLabel({ | |
text: 'Parsed: ', textAlign: 'left', | |
top: 10, left: 10, | |
color: 'black', | |
height: Ti.UI.SIZE || 'auto' | |
})); | |
var scanParsed = Ti.UI.createLabel({ | |
text: ' ', textAlign: 'left', | |
top: 10, left: 10, | |
color: 'black', | |
height: Ti.UI.SIZE || 'auto' | |
}); | |
scrollView.add(scanParsed); | |
function parseContentType(contentType) { | |
switch (contentType) { | |
case Barcode.URL: | |
return 'URL'; | |
case Barcode.SMS: | |
return 'SMS'; | |
case Barcode.TELEPHONE: | |
return 'TELEPHONE'; | |
case Barcode.TEXT: | |
return 'TEXT'; | |
case Barcode.CALENDAR: | |
return 'CALENDAR'; | |
case Barcode.GEOLOCATION: | |
return 'GEOLOCATION'; | |
case Barcode.EMAIL: | |
return 'EMAIL'; | |
case Barcode.CONTACT: | |
return 'CONTACT'; | |
case Barcode.BOOKMARK: | |
return 'BOOKMARK'; | |
case Barcode.WIFI: | |
return 'WIFI'; | |
default: | |
return 'UNKNOWN'; | |
} | |
} | |
function parseResult(event) { | |
var msg = ''; | |
switch (event.contentType) { | |
case Barcode.URL: | |
msg = 'URL = ' + event.result; | |
break; | |
case Barcode.SMS: | |
msg = 'SMS = ' + JSON.stringify(event.data); | |
break; | |
case Barcode.TELEPHONE: | |
msg = 'Telephone = ' + event.data.phonenumber; | |
break; | |
case Barcode.TEXT: | |
msg = 'Text = ' + event.result; | |
break; | |
case Barcode.CALENDAR: | |
msg = 'Calendar = ' + JSON.stringify(event.data); | |
break; | |
case Barcode.GEOLOCATION: | |
msg = 'Geo = ' + JSON.stringify(event.data); | |
break; | |
case Barcode.EMAIL: | |
msg = 'Email = ' + event.data.email + '\nSubject = ' + event.data.subject + '\nMessage = ' + event.data.message; | |
break; | |
case Barcode.CONTACT: | |
msg = 'Contact = ' + JSON.stringify(event.data); | |
break; | |
case Barcode.BOOKMARK: | |
msg = 'Bookmark = ' + JSON.stringify(event.data); | |
break; | |
case Barcode.WIFI: | |
return 'WIFI = ' + JSON.stringify(event.data); | |
default: | |
msg = 'unknown content type'; | |
break; | |
} | |
return msg; | |
} | |
window.add(scrollView); | |
window.open(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<android xmlns:android="http://schemas.android.com/apk/res/android"> | |
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> | |
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> | |
<uses-permission android:name="android.permission.CAMERA" /> | |
</android> | |
<modules> | |
<module>ti.barcode</module> | |
</modules> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment