Memindai dari aplikasi lain
Intent-nya
| Action | Filter di manifes | Yang terjadi | Hasil |
|---|---|---|---|
com.google.zxing.client.android.SCAN | Ya, intent implisit berfungsi. | Membuka pemindai. Kode pertama yang dikunci orang itu dikembalikan, seperti yang dilakukan ZXing Barcode Scanner. | RESULT_OK dengan SCAN_RESULT dan SCAN_RESULT_FORMAT |
app.scanner.action.SCAN | Ya. | Membuka pemindai. Dimulai untuk hasil (result launcher atau startActivityForResult) ia mengembalikan kode dengan cara yang sama; dimulai biasa, ia hanya membuka aplikasi di pemindai. | RESULT_OK dengan dua ekstra itu bila dimulai untuk hasil |
app.scanner.action.CARD | Tanpa filter: hanya intent eksplisit dengan paket com.verdettoqr.scanner. | Membuka editor kartu kontak milik orang itu, kode yang ia tunjukkan untuk berbagi datanya. Dimaksudkan untuk widget dan pintasan aplikasi sendiri; aplikasi lain boleh memanggilnya, tetapi tidak ada yang kembali. | Tidak ada |
android.intent.action.SEND dengan image/* | Ya. | Mendekode gambar: aplikasi menampilkan lembar hasil untuk kode di dalamnya. | Tidak ada |
Orang itu bisa mematikan pengembalian hasil di Pengaturan pada "Serahkan hasil ke aplikasi lain" ("Saat aplikasi meminta pindaian, kodenya dikembalikan ke aplikasi itu"), yang aktif secara bawaan. Bila dimatikan, kedua action pindai membuka pemindai sebagai peluncuran biasa dan launcher Anda menerima RESULT_CANCELED saat orang itu keluar. Kembali dari pemindai juga RESULT_CANCELED.
Saat ini tidak ada ekstra permintaan yang dibaca: bukan SCAN_MODE, SCAN_FORMATS, PROMPT_MESSAGE, SAVE_HISTORY, atau yang lain. Pemindai membaca setiap simbologi yang dikenalnya pada setiap panggilan. Kode yang ditandai pemeriksaan aplikasi tetap dikembalikan; orang itu melihat peringatannya dulu dan memutuskan.
Hasilnya
SCAN_RESULT(String): isi kode, persis byte yang dibawa kode, didekode sebagai teks (UTF-8 bila simbologinya mengizinkan, selain itu set karakter simbologi itu sendiri).SCAN_RESULT_FORMAT(String): simbologi dalam huruf besar dengan garis bawah, memakai nama ZXing bila ada. Dikirim saat ini:QR_CODE,MICRO_QR_CODE,RMQR_CODE,DATA_MATRIX,AZTEC,PDF417,MAXICODE,HAN_XIN,EAN_13,EAN_8,UPC_A,UPC_E,CODE_128,CODE_39,CODE_93,CODABAR,ITF,DATABAR,DATABAR_EXPANDED,DATABAR_LIMITED,DX_FILM_EDGE, dan simbologi lain yang ditambahkan dekoder aplikasi sendiri, dengan ejaan yang sama (nama yang tampil di lembar hasil, dihurufbesarkan, spasi dan tanda hubung menjadi garis bawah).
Tidak ada yang lain ikut: tidak ada gambar, lokasi, atau riwayat.
Kotlin
private val scan = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val text = result.data?.getStringExtra("SCAN_RESULT")
val format = result.data?.getStringExtra("SCAN_RESULT_FORMAT")
// use text and format
}
}
fun startScan() {
val intent = Intent("app.scanner.action.SCAN")
if (intent.resolveActivity(packageManager) != null) scan.launch(intent)
else startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(GET_VERDETTO)))
}
// the store page, with the developers referrer
private const val GET_VERDETTO =
"https://play.google.com/store/apps/details?id=com.verdettoqr.scanner&referrer=utm_source%3Ddevelopers%26utm_medium%3Ddocs%26utm_campaign%3Ddevelopers"
Pada Android 11 ke atas, tambahkan query ke manifes Anda agar resolveActivity bisa melihat aplikasinya:
<queries>
<intent>
<action android:name="app.scanner.action.SCAN" />
</intent>
</queries>
Java
private final ActivityResultLauncher<Intent> scan = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(), result -> {
if (result.getResultCode() == Activity.RESULT_OK && result.getData() != null) {
String text = result.getData().getStringExtra("SCAN_RESULT");
String format = result.getData().getStringExtra("SCAN_RESULT_FORMAT");
// use text and format
}
});
void startScan() {
Intent intent = new Intent("app.scanner.action.SCAN");
if (intent.resolveActivity(getPackageManager()) != null) scan.launch(intent);
else startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(GET_VERDETTO)));
}
Action ZXing
Kode yang ditulis untuk ZXing Barcode Scanner tetap berfungsi: kirim com.google.zxing.client.android.SCAN dengan cara yang sama dan baca dua ekstra yang sama. Jika lebih dari satu pemindai di ponsel menjawabnya, sistem menanyakan kepada orang itu mana yang dipakai; mengirim intent ke paket com.verdettoqr.scanner melewati langkah itu.
Yang dilihat pengguna
Pemindai terbuka seperti biasa, dengan pemeriksaannya sendiri. Saat kode terkunci, aplikasi mengembalikannya dan menutup; tidak ada milik Anda yang muncul di layar, dan tidak ada milik orang itu (riwayat, pengaturan, daftar keamanan) yang tersentuh panggilan tersebut.
Menguji di ponsel tanpa aplikasi. Halaman toko dengan referrer pengembang, alamat yang sama yang dibuka fallback dalam contoh: Dapatkan di Google Play. Sumber halaman ini adalah INTENT.md aplikasi sendiri; bila keduanya berbeda, repositori aplikasi yang benar dan halaman ini yang tertinggal.