实现支付宝扫一扫功能

Android开发中,如何实现支付宝扫一扫功能,用Java写出完整代码,要有注释,不许省略。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:gravity="center"

    android:orientation="vertical">

    <!-- 调用支付宝扫一扫的按钮 -->

    <Button

        android:id="@+id/btn_alipay_scan"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="调用支付宝扫一扫"

        android:textSize="18sp" />

</LinearLayout>

----------------------------------------------------------------------------------------------------

import android.content.Intent;

import android.content.pm.PackageInfo;

import android.content.pm.PackageManager;

import android.os.Bundle;

import android.widget.Button;

import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    // 支付宝扫一扫请求码(用于识别返回结果)

    private static final int REQUEST_CODE_ALIPAY_SCAN = 1001;

    // 支付宝包名(需确认,主流版本为com.eg.android.AlipayGphone )

    private static final String ALIPAY_PACKAGE_NAME = "com.eg.android.AlipayGphone"; 

    // 支付宝扫一扫Action(固定)

    private static final String ALIPAY_SCAN_ACTION = "android.intent.action.SCAN"; 

    private Button btnAlipayScan;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.activity_main); 

        // 初始化按钮

        btnAlipayScan = findViewById(R.id.btn_alipay_scan); 

        // 设置按钮点击事件

        btnAlipayScan.setOnClickListener(v  -> startAlipayScan());

    }

    /**

    * 启动支付宝扫一扫功能

    */

    private void startAlipayScan() {

        // 1. 检查支付宝是否安装

        if (!isAlipayInstalled()) {

            Toast.makeText(this,  "请先安装支付宝", Toast.LENGTH_SHORT).show();

            return;

        }

        // 2. 构建调用支付宝扫一扫的Intent

        Intent intent = new Intent();

        // 设置支付宝包名(确保只启动支付宝)

        intent.setPackage(ALIPAY_PACKAGE_NAME); 

        // 设置扫一扫Action

        intent.setAction(ALIPAY_SCAN_ACTION); 

        // 可选:指定扫描类型(二维码),若需扫描条形码用PRODUCT_MODE

        intent.putExtra("SCAN_MODE",  "QR_CODE_MODE");

        // 可选:设置扫描界面标题(部分版本支持)

        intent.putExtra("SCAN_TITLE",  "请扫描二维码");

        try {

            // 3. 启动支付宝扫一扫,并等待结果返回

            startActivityForResult(intent, REQUEST_CODE_ALIPAY_SCAN);

        } catch (Exception e) {

            // 捕获异常(如版本过低、不支持该Action)

            Toast.makeText(this,  "无法启动支付宝扫一扫,请检查版本", Toast.LENGTH_SHORT).show();

            e.printStackTrace(); 

        }

    }

    /**

    * 检查支付宝是否安装

    * @return true:已安装;false:未安装

    */

    private boolean isAlipayInstalled() {

        PackageManager pm = getPackageManager();

        try {

            // 获取支付宝包信息(若抛出异常则未安装)

            PackageInfo info = pm.getPackageInfo(ALIPAY_PACKAGE_NAME,  0);

            return info != null;

        } catch (PackageManager.NameNotFoundException e) {

            return false;

        }

    }

    /**

    * 处理支付宝扫一扫返回的结果

    * @param requestCode 请求码(与启动时一致)

    * @param resultCode 结果码(RESULT_OK:成功;RESULT_CANCELED:取消)

    * @param data 返回的Intent(包含扫描结果)

    */

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode,  resultCode, data);

        // 仅处理支付宝扫一扫的返回结果

        if (requestCode != REQUEST_CODE_ALIPAY_SCAN) return;

        // 结果处理逻辑

        if (resultCode == RESULT_OK && data != null) {

            // 获取扫描结果(键为SCAN_RESULT,需确认支付宝版本是否支持)

            String scanResult = data.getStringExtra("SCAN_RESULT"); 

            if (scanResult != null && !scanResult.isEmpty())  {

                Toast.makeText(this,  "扫描结果:" + scanResult, Toast.LENGTH_LONG).show();

                // 在这里处理扫描结果(如跳转链接、解析支付信息)

                handleScanResult(scanResult);

            } else {

                Toast.makeText(this,  "扫描结果为空", Toast.LENGTH_SHORT).show();

            }

        } else if (resultCode == RESULT_CANCELED) {

            Toast.makeText(this,  "扫描已取消", Toast.LENGTH_SHORT).show();

        } else {

            Toast.makeText(this,  "扫描失败", Toast.LENGTH_SHORT).show();

        }

    }

    /**

    * 处理扫描结果(根据业务需求自定义)

    * @param result 扫描得到的字符串(如二维码内容)

    */

    private void handleScanResult(String result) {

        // 示例:若结果是URL,跳转至浏览器

        if (result.startsWith("http://")  || result.startsWith("https://"))  {

            Intent browserIntent = new Intent(Intent.ACTION_VIEW);

            browserIntent.setData(android.net.Uri.parse(result)); 

            startActivity(browserIntent);

        } else {

            // 其他类型结果(如文本),直接显示

            Toast.makeText(this,  "扫描结果:" + result, Toast.LENGTH_LONG).show();

        }

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容