uni-app android13 plus.android.importClass("android.content.Context") 报错

uni-app android13 plus.android.importClass(“android.content.Context”) 报错

开发环境 版本号 项目创建方式
Windows 11 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:4.08

手机系统:Android

手机系统版本号:Android 13

手机机型:RT800

页面类型:vue

vue版本:vue2

打包方式:离线

项目创建方式:HBuilderX

示例代码:

<template>  
<view>  
<view style="text-align: center;padding: 10rpx 0;border: 1rpx solid #2B85E4;border-radius: 15rpx;"  
class="uni-flex uni-row" v-if="deviceList && deviceList.length>0" v-for="(device,index) in deviceList"  
key="index">
<view style="width: 30rpx;">{{index+1}}</view>
<view style="width: 180rpx;">{{device.name}}</view>
<view style="width: 310rpx;">{{device.address}}</view>
<view class="flex-item"><button type="primary" plain size="mini" [@click](/user/click)="print()">打印测试</button></view>  
<view class="flex-item"><button type="warn" plain size="mini"  
[@click](/user/click)="connectBlue(device)">已连接</button></view>  

</view>  
</view>  
</template>  
<script>
var tsc = require('../../components/gprint/tsc.js')  
var androidBlue = require('../../components/gprint/androidBluetooth.js')  
export default {  
    data() {  
        return {  
            curBlue: "",  
            show: {  
                setting: false  
            },  
            deviceList: []  
        }  
    },  
    onShow() {  

    },  
    onLoad() {  
        var that = this;  
        // #ifdef APP-PLUS  
        that.initPrinter();  
        // #endif  

        uni.getStorage({  
            key: 'myAndroidLanya',  
            success: function(res) {  
                console.log(111111111, res.data)  
                that.curBlue = res.data;  
            },  
            fail(e) {  
                uni.showToast({  
                    title: '未连接蓝牙打印机',  
                    duration: 2000,  
                    icon: "none"  
                })  
            }  
        });  
    },  
    methods: {  
        connectBlue(device) {  
            let dev = device  
            let that = this;  
            uni.setStorage({  
                key: 'myAndroidLanya',  
                data: dev.address  
            });  
            uni.setStorage({  
                key: 'myAndroidLanyaName',  
                data: dev.name  
            });  
            this.curBlue = device.address  
            uni.showToast({  
                title: '连接成功',  
                icon: 'success',  
                duration: 2000  
            });  
            this.$forceUpdate()  
        },  
        initPrinter: function() {  
            var that = this;  
            that.deviceList = [];  
            var main = plus.android.runtimeMainActivity();  
            var Context = plus.android.importClass("android.content.Context");  
            var BManager = main.getSystemService(Context.BLUETOOTH_SERVICE);  
            plus.android.importClass(BManager);  
            var BAdapter = BManager.getAdapter();  
            plus.android.importClass(BAdapter);  
            var lists = BAdapter.getBondedDevices();  
            plus.android.importClass(lists);  
            var iterator = lists.iterator();  
            plus.android.importClass(iterator);  
            while (iterator.hasNext()) {  
                var d = iterator.next();  
                plus.android.importClass(d);  
                var temp = {  
                    name: d.getName(),  
                    address: d.getAddress(),  
                    status: d.getBondState(),  
                    uuids: d.getUuids(),  
                    op: d  
                };  
                that.deviceList.push(temp);  
            }  
            console.log(that.deviceList, 44444444444444)  
        },  
        print() {  
            let command = this.getCommand()  
            console.log(111111111, androidBlue, command)  
            androidBlue.androidBlue.printToLanya(command)  
        },  
        printSomething(dev, print) {  
            var that = this;  
            var main = plus.android.runtimeMainActivity();  
            var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");  
            var UUID = plus.android.importClass("java.util.UUID");  
            var uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");  
            var BAdapter = BluetoothAdapter.getDefaultAdapter();  
            var device = BAdapter.getRemoteDevice(dev.address);  
            plus.android.importClass(device);  
            var bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);  
            plus.android.importClass(bluetoothSocket);  
            console.log("开始连接打印机:" + dev.name);  
            if (!bluetoothSocket.isConnected()) {  
                bluetoothSocket.connect();  
                if (bluetoothSocket.isConnected()) {  
                    console.log("设备已连接,开始发送打印文件");  
                    var outputStream = bluetoothSocket.getOutputStream();  
                    plus.android.importClass(outputStream);  
                    print(outputStream);  
                    bluetoothSocket.close();  
                    if (!bluetoothSocket.isConnected()) {  
                        console.log("设备已关闭");  
                    }  
                } else {  
                    uni.showToast({  
                        title: '设备连接失败',  
                        icon: 'error',  
                        duration: 2000  
                    });  
                }  
            }  
        },  
        getCommand() {  
            var command = tsc.jpPrinter.createNew();  
            command.setCls() //清除缓冲区,防止下一个没生效  
            command.setSize(100, 50) //设置标签大小,单位mm.具体参数请用尺子量一下  
            command.setGap(2) //设置两个标签之间的间隙,单位mm.具体参数请用尺子量一下  
            command.setCls() //清除缓冲区  
            // command.setBox(10, 10, 100, 100, 5) //绘制一个边框  
            let x = 12;  
            let y = 12;  
            let lineHeight = 60;  
            let curLine = 0;  
            let font = "TSS24.BF2"  
            let fangdax = 2;  
            let fangday = 2  
            command.setText(x, y + lineHeight * curLine, font, 0, fangdax, fangday, "名称:") //绘制文字  
            curLine++;  
            command.setText(x, y + lineHeight * curLine, font, 0, fangdax, fangday, "批号:") //绘制文字  
            curLine++;  
            command.setText(x, y + lineHeight * curLine, font, 0, fangdax, fangday, "人员:") //绘制文字  
            curLine++;  
            command.setText(x, y + lineHeight * curLine, font, 0, fangdax, fangday, "日期") //绘制文字  
            command.setPagePrint() //执行打印指令  
            return command;  
        },  
        mySleep: async function(time) {  
            await this.mypromise(time);  
        },  
        mypromise: function(time) {  
            return new Promise((resolve) => setTimeout(resolve, time));  
        }  
    }  
}
</script>  
<style >  
.page {  
padding: 0;  
margin: 0;  
}  
.picked {  
background-color: lavender;  
}  
</style>

更多关于uni-app android13 plus.android.importClass("android.content.Context") 报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

请问搞安卓原生的大佬,android 版本提升后,是因为权限没有配置,还是要改变方法。在uni文档找好久没找到解决办法。

更多关于uni-app android13 plus.android.importClass("android.content.Context") 报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在处理 uni-app 中使用 plus.android.importClass 导入 Android 类时遇到错误,特别是在 Android 13 上,通常是由于权限问题、API 级别不兼容或者调用方式不正确导致的。以下是一个基本的示例代码,展示如何在 uni-app 中正确使用 plus.android.importClass 来导入 android.content.Context 类,并处理可能的错误。

首先,确保你的 manifest.json 文件中已经配置了必要的权限和 Android 平台设置。由于 plus.android API 是 5+ App(HBuilderX 打包的 Android/iOS 应用)特有的,确保你是在一个支持 5+ API 的环境中运行代码。

// manifest.json 中的相关配置示例
{
  "plus": {
    "distribute": {
      "android": {
        "permissions": [
          "android.permission.INTERNET"
          // 根据需要添加其他权限
        ]
      }
    }
  }
}

接下来,在你的 uni-app 项目中,尝试以下代码来安全地导入 android.content.Context 并处理可能的异常:

// 在页面的 onLoad 或其他适当生命周期函数中调用
onLoad() {
    try {
        // 导入 android.content.Context 类
        var Context = plus.android.importClass('android.content.Context');
        console.log('Context 类导入成功');
        
        // 这里可以进一步使用 Context 类,例如获取应用上下文
        var main = plus.android.runtimeMainActivity();
        var appContext = main.getApplicationContext();
        console.log('应用上下文:', appContext);
    } catch (e) {
        // 捕获并处理错误
        console.error('导入 Context 类失败:', e.message);
        
        // 根据错误类型进行特定处理,例如提示用户或记录日志
        if (e.code === plus.android.ERROR_CLASS_NOT_FOUND) {
            console.error('类未找到,可能是 API 级别不支持或类名错误');
        } else {
            console.error('其他错误:', e);
        }
    }
}

注意几点:

  1. 错误处理:使用 try-catch 块来捕获并处理可能的异常,这对于调试和运行时稳定性非常重要。
  2. API 级别:确保你的 uni-app 项目配置和目标 Android 设备或模拟器的 API 级别兼容。
  3. 权限管理:虽然导入 Context 类通常不需要额外权限,但实际应用中可能涉及其他敏感操作,需确保权限已正确申请。

如果问题依旧存在,检查 uni-app 和 HBuilderX 的版本是否最新,以及是否有关于 Android 13 的特定更新或限制。

回到顶部