दूसरे ऐप से स्कैन करना
इंटेंट
| Action | मैनिफ़ेस्ट में फ़िल्टर | क्या होता है | परिणाम |
|---|---|---|---|
com.google.zxing.client.android.SCAN | हाँ, इम्प्लिसिट इंटेंट काम करते हैं। | स्कैनर खोलता है। व्यक्ति जो पहला कोड लॉक करता है वह वापस दिया जाता है, जैसा ZXing Barcode Scanner करता था। | RESULT_OK के साथ SCAN_RESULT और SCAN_RESULT_FORMAT |
app.scanner.action.SCAN | हाँ। | स्कैनर खोलता है। परिणाम के लिए शुरू किया गया (result launcher या startActivityForResult) तो कोड उसी तरह वापस देता है; सादे तौर पर शुरू किया गया तो बस ऐप को स्कैनर पर खोलता है। | परिणाम के लिए शुरू होने पर दोनों एक्स्ट्रा के साथ RESULT_OK |
app.scanner.action.CARD | कोई फ़िल्टर नहीं: केवल पैकेज com.verdettoqr.scanner के साथ एक्सप्लिसिट इंटेंट। | व्यक्ति के अपने संपर्क कार्ड का एडिटर खोलता है, वह कोड जो वह अपनी जानकारी साझा करने के लिए दिखाता है। ऐप के अपने विजेट और शॉर्टकट के लिए बना है; कोई दूसरा ऐप इसे कॉल कर सकता है, पर कुछ वापस नहीं आता। | कुछ नहीं |
android.intent.action.SEND के साथ image/* | हाँ। | एक चित्र को डिकोड करता है: ऐप उसमें मौजूद कोड के लिए परिणाम शीट दिखाता है। | कुछ नहीं |
व्यक्ति सेटिंग में "परिणाम दूसरे ऐप को सौंपें" ("जब कोई ऐप स्कैन माँगता है, तो कोड उसे वापस जाता है") के तहत वापसी बंद कर सकता है, जो डिफ़ॉल्ट रूप से चालू है। बंद होने पर दोनों में से कोई भी स्कैन action स्कैनर को सामान्य लॉन्च की तरह खोलता है और व्यक्ति के बाहर निकलने पर आपके launcher को RESULT_CANCELED मिलता है। स्कैनर से पीछे जाना भी RESULT_CANCELED है।
आज कोई अनुरोध एक्स्ट्रा नहीं पढ़ा जाता: न SCAN_MODE, SCAN_FORMATS, PROMPT_MESSAGE, SAVE_HISTORY, न कोई और। स्कैनर हर कॉल पर अपनी जानी हुई हर सिंबोलॉजी पढ़ता है। जिस कोड को ऐप की जाँचें चिह्नित करती हैं वह भी वापस दिया जाता है; व्यक्ति पहले चेतावनी देखता है और फ़ैसला करता है।
परिणाम
SCAN_RESULT(String): कोड की सामग्री, ठीक वही बाइट जो कोड में थे, टेक्स्ट के रूप में डिकोड किए गए (जहाँ सिंबोलॉजी अनुमति देती है वहाँ UTF-8, अन्यथा सिंबोलॉजी का अपना कैरेक्टर सेट)।SCAN_RESULT_FORMAT(String): सिंबोलॉजी बड़े अक्षरों में अंडरस्कोर के साथ, जहाँ मौजूद हों वहाँ ZXing के नाम। आज दिए जाते हैं: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, और वे अन्य सिंबोलॉजी जो ऐप के अपने डिकोडर जोड़ते हैं, उसी वर्तनी में (परिणाम शीट पर दिखने वाला नाम, बड़े अक्षरों में, स्पेस और हाइफ़न अंडरस्कोर के रूप में)।
और कुछ नहीं जाता: न चित्र, न स्थान, न इतिहास।
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"
Android 11 और बाद के संस्करणों पर, अपने मैनिफ़ेस्ट में क्वेरी जोड़ें ताकि resolveActivity ऐप को देख सके:
<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)));
}
ZXing action
ZXing Barcode Scanner के लिए लिखा गया कोड काम करता रहता है: com.google.zxing.client.android.SCAN उसी तरह भेजें और वही दो एक्स्ट्रा पढ़ें। अगर फ़ोन पर एक से ज़्यादा स्कैनर इसका जवाब देते हैं, तो सिस्टम व्यक्ति से पूछता है कि कौन सा इस्तेमाल करना है; इंटेंट को पैकेज com.verdettoqr.scanner पर भेजने से यह चरण छूट जाता है।
व्यक्ति क्या देखता है
स्कैनर हमेशा की तरह खुलता है, अपनी जाँचों के साथ। कोड लॉक होने पर ऐप उसे वापस देता है और बंद हो जाता है; स्क्रीन पर आपका कुछ नहीं दिखता, और उसका कुछ भी (इतिहास, सेटिंग, सुरक्षा सूची) इस कॉल से नहीं छुआ जाता।
बिना ऐप वाले फ़ोन पर परीक्षण। डेवलपर रेफ़रर के साथ स्टोर पेज, वही पता जो उदाहरणों का फ़ॉलबैक खोलता है: Google Play पर पाएँ। इस पेज का स्रोत ऐप की अपनी INTENT.md है; दोनों में अंतर हो तो ऐप रिपॉज़िटरी सही है और यह पेज पीछे है।