一分鐘實現掃描二維碼功能

前言

二維碼掃描的功能在很多APP上都會出現,較爲常用的第三方庫是zxing,zxing很強大,但是有時候我們並不需要那麼複雜的功能,只需要簡單的掃描、生成以及處理掃描結果,一般都是通過重寫幾個類來實現項目需求。我開發了幾個項目都用到了掃描二維碼的功能,第一個項目,寫了個完整的功能,之後的項目都是從第一個項目裏面複製代碼的,幾次之後,覺得有點繁瑣,所以就單獨封裝成一個項目,傳到jcenter上,以後再遇到掃描二維碼的功能,只需要在gradle導入,即可實現快速開發了。

下載APP體驗
img

導入

compile 'com.hebin:hxbrzxing:1.0.1'

使用

導入庫之後,就可以使用掃描二維碼的功能了,只需要新建一個activity,然後繼承CaptureActivity即可。

class MainActivity : CaptureActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

自定義使用

如果只是簡單的繼承,那麼得到的效果圖如下:
這裏寫圖片描述

這裏提供了幾個可以自定義的屬性;

1. 標題欄自定義

class MainActivity : CaptureActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val view = LayoutInflater.from(this@MainActivity).inflate(R.layout.simple_title,null)
        setTitleView(view)
    }
}

2. 背景圖片自定義

class MainActivity : CaptureActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setBackground(R.mipmap.ic_launcher)
    }
}

3. 提示文字自定義

class MainActivity : CaptureActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setTipText("請掃描二維碼")
    }
}

4. 附加功能

class MainActivity : CaptureActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val view= LayoutInflater.from(this@MainActivity).inflate(R.layout.simple_title,null)
        // 打開相冊,識別圖片二維碼
        view.tvTitle.setOnClickListener { openPhoto() }
        // 打開閃光燈
        view.tvTitle.setOnClickListener { openLight() }
        setTitleView(view)
    }

}

掃描結果處理

繼承CaptureActivity.ResultListener,並且在oncreat裏面,寫上setListener(this)即可實現監聽,然後在onResult裏面做邏輯處理。

class MainActivity : CaptureActivity(), CaptureActivity.ResultListener {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setListener(this)
    }

    override fun onResult(result: String) {
        if (result.contains("http")) {
            Toast.makeText(this@MainActivity, "跳轉到網頁", Toast.LENGTH_SHORT).show()
        } else {
            Toast.makeText(this@MainActivity, "這個二維碼不是網頁", Toast.LENGTH_SHORT).show()
        }
    }
}

後話

至此,只要通過簡單的幾行代碼就實現掃描二維碼的功能,而且這個掃描二維碼的功能,是支持連續掃描的,不需要退出重新進入即可再次掃描。項目源碼已經傳到github上了。

 https://github.com/Hebin320/Zxing
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章