android開發:zxing-android-embedded豎屏掃描功能

Android 點擊按鈕調用豎屏二維碼掃描

提示:zxing-android-embedded插件已過時,建議更換別的。
場景:Home頁面上有個掃描按鈕,點擊后打開攝像頭完成掃描功能,掃描時要求豎屏。
方案:使用zxing-android-embedded插件,新建獨立的activity,設置為豎屏。

1. 添加依賴

在 app 的 build.gradle 中添加:

dependencies {implementation 'com.journeyapps:zxing-android-embedded:4.3.0'implementation 'androidx.appcompat:appcompat:1.4.1'
}

2. 創建自定義豎屏掃描 Activity

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.journeyapps.barcodescanner.CaptureActivity;/*** 自定義豎屏掃描Activity*/
public class VerticalScannerActivity extends CaptureActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 可以在這里添加自定義布局或樣式// 默認情況下會使用庫自帶的豎屏布局}
}

3. 在 AndroidManifest.xml 中聲明

<application><!-- 相機權限 --><uses-permission android:name="android.permission.CAMERA" /><!-- 自定義掃描Activity --><!-- 強制豎屏 --><activityandroid:name=".VerticalScannerActivity"android:screenOrientation="portrait"/>
</application>

4. 創建按鈕布局 (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"android:gravity="center"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn_scan"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="掃描二維碼"android:textSize="18sp"android:padding="16dp"/>
</LinearLayout>

5. 實現 MainActivity

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;public class MainActivity extends AppCompatActivity {private static final int SCAN_REQUEST_CODE = 1001;private TextView tvResult;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button btnScan = findViewById(R.id.btn_scan);tvResult = findViewById(R.id.tv_result);btnScan.setOnClickListener(v -> startQrScanner());}private void startQrScanner() {// 創建掃描器實例IntentIntegrator integrator = new IntentIntegrator(this);// 配置掃描參數// integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE); // 只掃描QR碼integrator.setPrompt("將二維碼放入框內掃描"); // 提示文字integrator.setCameraId(0); // 使用后置攝像頭integrator.setBeepEnabled(false); // 關閉提示音integrator.setBarcodeImageEnabled(false); // 不保存掃描圖片// integrator.setOrientationLocked(true); // 鎖定豎屏integrator.setCaptureActivity(VerticalScannerActivity.class); // 使用自定義豎屏Activity// 啟動掃描integrator.initiateScan();}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);// 處理掃描結果IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);if (result != null) {if (result.getContents() == null) {Toast.makeText(this, "掃描已取消", Toast.LENGTH_SHORT).show();} else {// 顯示掃描結果tvResult.setText("掃描結果: " + result.getContents());}}}
}

6. 配置方法

方法 說明
setDesiredBarcodeFormats(String... formats) 設置要掃描的條碼類型
setPrompt(String prompt) 設置提示文字
setCameraId(int cameraId) 設置攝像頭ID (0=后置, 1=前置)
setBeepEnabled(boolean enabled) 設置掃描成功時是否播放提示音
setBarcodeImageEnabled(boolean enabled) 設置是否保存掃描的條碼圖片
setOrientationLocked(boolean locked) 是否鎖定屏幕方向
setCaptureActivity(Class<?> captureActivity) 設置自定義掃描Activity
setTimeout(long timeout) 設置超時時間(毫秒)
setTorchEnabled(boolean enabled) 是否啟用手電筒功能
addExtra(String key, Object value) 添加額外參數

7. 特點說明

  1. 強制豎屏:通過 android:screenOrientation="portrait" 確保掃描界面保持豎屏
  2. 簡潔集成:使用 IntentIntegrator 簡化掃描流程
  3. 結果處理:在 onActivityResult 中處理掃描結果
  4. 自定義界面:可以通過繼承 CaptureActivity 進一步自定義掃描界面
  5. 權限處理:包含完整的運行時權限處理邏輯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75575.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75575.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75575.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

指令補充+樣式綁定+計算屬性+監聽器

一、指令補充 1. 指令修飾符 1. 作用: 借助指令修飾符, 可以讓指令更加強大 2. 分類: 1> 按鍵修飾符: 用來檢測用戶的按鍵, 配合鍵盤事件使用. keydown 和 keyup 語法: keydown.enter/v-on:keydown.enter 表示當enter按下的時候觸發 keyup.enter/v-on:keyup.enter 表示當…

Python基于時間序列分析的降雨量預測系統的設計與實現【附源碼、文檔說明】

博主介紹&#xff1a;?Java老徐、7年大廠程序員經歷。全網粉絲12w、csdn博客專家、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精彩專欄推薦訂閱&#x1f447;&…

【2022】【論文筆記】基于相變材料的光學激活的、用于THz光束操作的編碼超表面——

前言 類型 太赫茲 + 超表面 太赫茲 + 超表面 太赫茲+超表面 期刊 A D V A N C E D ?? O P T I C A L ?? M A T E R I A L S ADVANCED \; OPTICAL \; MATERIALS

[VolgaCTF 2025] Baby-Welcome,BrokeBroke,Field Rules

這個就做了倆題&#xff0c;其實再努力點就是3個。不過最近也算是好成績了&#xff0c;45名。國外的比賽對我來說還算是比較難的。 Baby-Welcome 這個流程還挺麻煩&#xff0c;先是注冊用戶&#xff0c;登錄的用戶可以給其它用戶發消息。收到消息的用戶可以顯示消息&#xff…

再見VS Code!Google IDE 正顛覆傳統開發體驗

云端開發的革命&#xff1a;Google Project IDX 如何顛覆傳統開發體驗 在軟件開發領域&#xff0c;Google 最新推出的 Project IDX 絕非僅僅是另一個“基于瀏覽器的 VS Code”——它是一次真正的范式轉變。與 VS Code、Cursor 等傳統工具不同&#xff0c;IDX 是一個完全云原生的…

NLP高頻面試題(三十六)——深入理解思維鏈(Chain-of-Thought)提示方法

一、什么是思維鏈提示&#xff08;CoT&#xff09;&#xff1f; 思維鏈提示是一種新穎的提示方法&#xff0c;通過向模型提供少量的推理步驟示范&#xff0c;讓語言模型在給出最終答案之前展示出自己的推理過程。其核心思想在于鼓勵模型模仿人類逐步推理的方式&#xff0c;從而…

探索新一代大模型代理(LLM agent)及其架構

在人工智能大模型(AI)的浪潮中&#xff0c;2023年我們見證了檢索增強生成(Retrieval Augmented Generation, RAG)的興起&#xff0c;而2024年則無疑成為了“代理”agent的元年。各大AI企業紛紛投身于聊天機器人代理的研發中&#xff0c;工具如MultiOn通過與外部網站的連接實現了…

26考研——線性表_ 線性表的鏈式表示_雙循環鏈表(2)

408答疑 文章目錄 三、 線性表的鏈式表示雙循環鏈表單鏈表與雙鏈表的比較單鏈表的特點雙鏈表的特點 雙鏈表上基本操作的實現雙鏈表的插入操作雙鏈表的刪除操作 雙鏈表的代碼實操定義結點創建一個結點帶頭結點的雙鏈表初始化創建雙鏈表打印雙鏈表查找結點插入結點在指定節點后插…

【備忘】在Docker中安裝寶塔面板,實現環境隔離,又能快速遷移服務器環境

我的環境是阿里云服務器&#xff08;新環境&#xff09; 【待繼續】 【新方法】 我已經安裝了docker&#xff0c;所以這里我先卸載。 卸載命令&#xff1a; sudo yum remove docker* containerd.io -y Docker默認保存位置是/var/lib/docker/&#xff0c;卸載Docker時&#x…

池化技術的深度解析與實踐指南【大模型總結】

池化技術的深度解析與實踐指南 池化技術作為計算機系統中的核心優化手段&#xff0c;通過資源復用和預分配機制顯著提升系統性能。本文將從原理、實現到最佳實踐&#xff0c;全方位剖析池化技術的核心要點&#xff0c;并結合實際案例說明其應用場景與調優策略。 一、池化技術的…

HCIP【BGP協議(詳解)】

目錄 1 BGP協議產生背景 2 BGP協議特性 2.1 自治系統間路由傳播 2.2 路由矢量協議 2.3 防環機制 2.4 基于TCP傳輸 2.5 路由更新機制 2.6 豐富的路由屬性 2.7 支持CIDR和路由聚合 2.8 路由過濾和策略控制 2.9 動態對等體功能 3 BGP基本術語 4 BGP規劃問題 4.1 路…

VirtualBox 配置雙網卡(NAT + 橋接)詳細步驟

在 VirtualBox 中為 CentOS 虛擬機配置雙網卡&#xff08;NAT 橋接&#xff09;&#xff0c;使其既能訪問外網&#xff08;NAT&#xff09;&#xff0c;又能與宿主機&#xff08;Windows 10&#xff09;或局域網通信&#xff08;橋接&#xff09;。 步驟 1&#xff1a;關閉虛…

Upload-labs靶場通關

之前搭好了靶場&#xff0c;Upload-labs 靶場搭建 及一句話木馬的原理與運用-CSDN博客 今天開始通關并寫詳細流程 Pass-1 來到靶場的第一關 先隨便上傳php 代碼 點擊上傳 發現文件類型被限制了 方法1&#xff1a; 改文件后綴為合法文件&#xff08;.jpg .png .gif&#xf…

[GN] Python3基本數據類型 -- 與C的差異

Python3 面向對象 文章目錄 Python3的基本數據類型6個標準的數據類型NumbersStringListtupleSetsDictionaries Python運算符邏輯 運算符成員運算符身份運算符 Python3 數字Python3 序列序列切片序列相加序列相乘序列相關內置函數 Python3 列表訪問列表的值更新列表刪除列表元素…

MCP over MQTT:EMQX 開啟物聯網 Agentic 時代

前言 隨著 DeepSeek 等大語言模型&#xff08;LLM&#xff09;的廣泛應用&#xff0c;如何找到合適的場景&#xff0c;并基于這些大模型構建服務于各行各業的智能體成為關鍵課題。在社區中&#xff0c;支持智能體開發的基礎設施和工具層出不窮&#xff0c;其中&#xff0c;Ant…

AI助力高效PPT制作:從內容生成到設計優化

隨著人工智能技術的不斷發展&#xff0c;AI在各個領域的應用日益普及&#xff0c;尤其是在文檔和演示文稿的創建過程中。PowerPoint&#xff08;PPT&#xff09;作為最常用的演示工具之一&#xff0c;借助AI的技術手段&#xff0c;可以極大地提高制作效率并提升最終呈現效果。在…

學透Spring Boot — 009. Spring Boot的四種 Http 客戶端

目錄 常見的HttpClient Spring 提供的HttpClient RestTemplate Spring 提供的模板類 XXXTemplate RestTemplate的使用 RestTemplate的使用技巧 RestTemplate的問題 RestClient RestClinet的基本使用 RestClient的自動配置 RestClient 序列化對象 異常處理 onStatus …

leetcode117 填充每個節點的下一個右側節點指針2

LeetCode 116 和 117 都是關于填充二叉樹節點的 next 指針的問題&#xff0c;但它們的區別在于 樹的類型 不同&#xff0c;117與 116 題類似&#xff0c;但給定的樹是 普通二叉樹&#xff08;不一定完全填充&#xff09;&#xff0c;即某些節點可能缺少左或右子節點。 樹的結構…

軟考系統架構師 — 4 嵌入式軟件

目錄 4.1 考點分析 4.2 嵌入式微處理器 4.2.1嵌入式微處理器體系結構 5.2.2 嵌入式微處理器分類 4.2.3 多核處理器 4.3 嵌入式軟件 4.4 嵌入式系統 4.4.1 嵌入式系統的組成 4.4.2 嵌入式系統分類 4.4.3 嵌入式數據庫系統DBMS 4.4.4 嵌入式操作系統OS 4.4.5 嵌入式實…

RocketMQ 中的 ProducerManager 組件剖析

一、引言 在分布式系統的消息傳遞領域&#xff0c;RocketMQ 以其高性能、高可用性和強大的擴展性脫穎而出。ProducerManager 作為 RocketMQ 中的一個關鍵組件&#xff0c;在消息生產環節發揮著至關重要的作用。它負責管理消息生產者&#xff08;Producer&#xff09;的生命周期…