android 6.0 权限程序崩溃,扫二维码崩溃与按键事件

[Android][实战]Android Enterprise之Lock Task Mode权限获取与退出机制详解 本文详细解析了Android Enterprise中Lock Task Mode的权限获取与退出机制。针对专用设备(如教育平板、零售POS机)需锁定前台应用的需求,文章从Device Owner/Profile Owner权限基础讲起,逐步指导开发者通过配置设备管理员、获取Device Owner权限、设置白名单并最终启动锁定任务。同时,重点阐述了如何设计安全可控的退出逻辑,避免设备“变砖”,为构建企业级Kiosk应用提供完整实战方案。 阅读详情

1.权限
解决困扰我两天的问题,项目调用一些.so文件,demo,和老版本的在华为 6.0系统运行正常,但是我的项目在6.0以下的手机上运行正常,在6.0系统上程序直接崩溃,6.0系统自然想到了权限问题,但是demo没问题,问设备技术支持,直接让参考demo。并且崩溃的手机CPU是64位的,我的是32位的,最会发邮件给技术支持要arm64-v8a的文件。半天也没回,估计是没有吧。
其中加了这个也没用
后来再次遇到特殊型号设备:程序崩溃问题:原因是arm64-v8a、armeabi-v7a、armeabi 内文件数目不一样,也就是有so文件缺少对应的库,所以一定要确保每个文件夹下都有对应的文件

关于arm64-v8a、armeabi-v7a、armeabi、x86可以看这篇博文 我的Android进阶之旅——>Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题

最后想还是权限的问题,直到看到了段话,我们指定targetSdkVersion为23或者之后我们还需要在运行时请求这些所需的权限。这很重要,因为已经出现了很多开发者把targetSdkVersion飙到了最新,然后发现自己的app疯狂的崩溃,这是由于他们没有实现执行运行时权限请求的代码。原文地址 最后看了看demo的targetSdkVersion确实设置的很低,最后把项目的targetSdkVersion调低了点,一切正常了。
targetSdkVersion:表示你已经在该版本上做了充分的测试,系统将为你的应用程序启动一些最新啊的功能,比如targetSdkVersion=23 系统将为你启动运行时权限这个功能,如果设置为22说明你的程序在5.1系统上进行了充分的测试,6.0的新功能自然不会启用。
versionCode 程序的版本号
软件更新时一般会用到

    /**
     * 获取版本号
     * @return 当前应用的版本号
     */
    public int  getVersion() {
        try {
            PackageManager manager = this.getPackageManager();
            PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0);
            int version = info.versionCode;
            return  version;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

之前也应为so库报错在5.0上,说缺少一个库文件,但是用的那个开源库没有提供那个库,给作者联系加qq被拒,想起了那句话害死人不偿命。最后别人推荐了一个稳定的库,地址
2、本来一个功能键 Memu 弹出个菜单,但是在6.0上好像没了这个菜单,只好在右侧加个菜单键。当一些物理按钮被按下时会调用onKeyDown()方法。 网上找的一段代码修修改改。

import android.os.Bundle;  
import android.view.KeyEvent;  
import android.view.MotionEvent;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.Toast;  
import android.app.Activity;  

/** 
 * Android常用的物理按键及其触发事件  
 * KEYCODE_POWER 电源键  
 * KEYCODE_MENU 菜单键  
 * KEYCODE_BACK 后退键 
 * KEYCODE_HOME Home键  
 * KEYCODE_CAMERA 相机键  
 * KEYCODE_SEARCH 查找键  
 * KEYCODE_VOLUME_UP 音量键+  
 * KEYCODE_VOLUME_DOWN 音量键-  
 * KEYCODE_VOLUME_MUTE 静音  
 * 方向键  
 * KEYCODE_DPAD_CENTER 
 * KEYCODE_DPAD_UP  
 * KEYCODE_DPAD_DOWN  
 * KEYCODE_DPAD_LEFT  
 * KEYCODE_DPAD_RIGHT  
 * 键盘键 
 * 数字0~9 字母A~Z  
 * KEYCODE_0 ~ KEYCODE_9  
 * KEYCODE_A ~ KEYCODE_Z  
 * 提供的回调方法有 
 * onKeyUp()、OnKeyDown()、onKeyLongPress() 
 *  
 * @author Administrator 
 *  
 */  
public class MainActivity extends Activity {  

    private Button btnClose = null;  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        btnClose = (Button) findViewById(R.id.btnClose);  
        btnClose.setOnClickListener(new closelistener());  
    }  

    class closelistener implements OnClickListener {  

        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            finish();  
        }  

    }  

    /** 
     * 重写onKeyDown方法可以拦截系统默认的处理 
     */  
    @Override  
    public boolean onKeyDown(int keyCode, KeyEvent event) {  
        // TODO Auto-generated method stub  
        if (keyCode == KeyEvent.KEYCODE_BACK) {  
            Toast.makeText(this, "后退键", Toast.LENGTH_SHORT).show();  
            return true;  
        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {  
            Toast.makeText(this, "声音+", Toast.LENGTH_SHORT).show();  
            return false;  
        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {  
            Toast.makeText(this, "声音-", Toast.LENGTH_SHORT).show();  
            return false;  
        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_MUTE) {  
            Toast.makeText(this, "静音", Toast.LENGTH_SHORT).show();  
            return false;  
        } else if (keyCode == KeyEvent.KEYCODE_HOME) {  
            Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();  
            return true;  
        }  
        return super.onKeyDown(keyCode, event);  
    }  

    /** 
     * 重写onTouchEvent方法可以处理Touch事件 
     */  
    @Override  
    public boolean onTouchEvent(MotionEvent event) {  
        // TODO Auto-generated method stub  
        if (event.getAction() == MotionEvent.ACTION_MOVE) {  
            Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();  
        } else if (event.getAction() == MotionEvent.ACTION_UP) {  
            Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();  
        } else if (event.getAction() == MotionEvent.ACTION_DOWN) {  
            Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();  
        }  
        return super.onTouchEvent(event);  
    }  
  }  

动态权限申请

   private String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION};

f (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            // 检查该权限是否已经获取
            int i = ContextCompat.checkSelfPermission(this, permissions[0]);
            // 权限是否已经 授权 GRANTED---授权  DINIED---拒绝
            if (i != PackageManager.PERMISSION_GRANTED) {
                // 如果没有授予该权限,就去提示用户请求
                 startRequestPermission();
            }else{
            //正常操作
            }
        }

 // 开始提交请求权限
    private void startRequestPermission() {
        ActivityCompat.requestPermissions(this, permissions, 321);
    }
 // 用户权限 申请 的回调方法
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == 321) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
     //获取失败               
                } else {
                    Toast.makeText(this, "权限获取成功", Toast.LENGTH_SHORT).show();
                    //进行正常操作
                }
            }
        }
    }
UniApp扫码功能深度解析:从API调用到多端兼容与性能优化实战 扫码功能作为连接物理世界与数字世界的关键入口,在移动开发中扮演着重要角色。其核心原理是通过摄像头捕获图像,利用图像识别算法(如ZXing、jsQR)解析条码中的编码信息,转换为可处理的字符串数据。这项技术的价值在于为零售、物流、票务等线下场景提供了高效的数据采集方式,极大提升了业务流程的自动化水平。在实际工程实践中,开发者常需处理多端兼容性、权限管理、性能优化等挑战。以跨端框架UniApp为例,其提供的`uni.scanCode`API封装了各平台底层能力,但在处理一维码与二维码混合识别、安卓机型乱码、iO 阅读详情

相关推荐

Mono平台产品化落地:从.NET程序员到物理世界交付者

Mono并非.NET的轻量移植,而是在资源受限、硬件异构、环境不可控的物理场景中保障C#可靠运行的生存协议。其技术设计根植于嵌入式内存模型、实时性约束与硬件ABI规范,核心价值在于将托管代码行为锚定到可验证的物理结果——如电机启停、传感器采样、继电器吸合等。区别于Web服务的抽象失败(如HTTP 500),Mono要求开发者明确定义‘失败’的物理形态,并据此选择GC策略、AOT编译粒度、TLS实现方式及时间精度方案。它适用于工业PLC、医疗设备、IoT终端等需通过IEC 62304/61508认证、强依赖确

天下无双 551

Android模拟、实现、触发系统按键事件的方法

能够在代码中实现、模拟用户的按键,相当于用户的手指操作,比方,当用户点了屏幕下方的返回键。

xiaoerbuyu1233的博客 491

通义千问网页版登录全流程指南与故障排查

网页版登录是用户接触大模型服务的第一道交互入口,其本质是基于OAuth 2.0与阿里统一身份认证(UCenter)的跨域授权流程。该机制依赖手机号实名核验、短信验证码时效性、浏览器Cookie持久化及设备指纹风控等关键技术环节,直接影响用户体验连续性与转化率。在实际应用中,常见问题集中于域名识别错误、阿里系账号授权缺失、验证码通道受阻、HTTPS证书兼容性不足以及无痕模式导致登录态丢失等典型场景。本文聚焦‘通义千问’‘网页版’‘登录方法’三大核心热词,提供可验证、可复现、可绕行的工程级解决方案,覆盖普通用户

611

Android二维码扫描框大小调整后,扫描二维码崩溃,无响应问题

Android的二维码扫描都是基于google的ZXing库来实现的,想学习二维码扫描的同学可以 参考 Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果 不同的APP肯定有不同的UI风格,都需要根据自己的设计图来调整扫码页面的样式。 修改扫描框的大小实在 CameraManager类里面来实现的 、 我这里是把扫码框大小调整为 p

qq_30380777的博客 1978

【信息科学与工程学】计算机科学与自动化——第六十三篇 人机交互之前端交互参数知识库02

每个分支下又细分了四个关键方向,并按照“研究对象/焦点、基本问题、核心理论/概念、研究方法、应用/目标、前沿/发展”的框架进行阐述,严格遵循了六级编码体系。在最终整合时,应建立唯一的学科分类编码表(例如,用两位数字或“ART”、“MED”、“ECO”等字母前缀),并确保所有下级编码(尺度、层次、类别、子类、具体项)的逻辑一致性。此回答中的编码为示例,实际系统需据此调整。控制过程(前馈、同期、反馈)、全面质量管理(TQM)、平衡计分卡(BSC)定量(调查、实验)、定性(访谈、民族志)、混合方法、大数据。

weixin_49199313的博客 680

Android PDA条码扫描开发实战:从扫码广播到安装部署全解析

在工业移动场景中,PDA条码扫描是仓储物流、门店盘点和物料领用的核心交互方式。其实现原理并不复杂,关键在于理解扫码引擎的广播机制与数据链路设计。常见的方案包括厂商SDK直连、标准广播监听和输入法注入,其中广播监听因跨品牌兼容性高而成为主流。工程实践中需重点解决本地优先存储、离线同步、连续扫码防重、屏幕常亮及不同品牌PDA的适配问题。此外,APK在定制系统上频繁出现的“未安装”报错,往往源于签名冲突、targetSdk过高或CPU架构不匹配,需按排查顺序逐一处理。本文以HTAPP项目为例,完整呈现从环境配置、

weixin_34226706的博客 548

android 开发快捷键,Android开发部分快捷键总结

将开发过程中的快捷键的使用,总结,便于强化学习编辑1.【Ctrl+C】:复制。2.【Ctrl+X】:剪切。3.【Ctrl+V】:粘贴。1. Windows操作系统(1)F2 -- 对选中文件夹重命名(2)Win + D -- 显示桌面(3)Win + E -- 打开“我的电脑”(4)Win ...一、移动二、搜索三、替换功能Windows快捷键Mac快捷键说明隐藏编辑框...

weixin_33643788的博客 735

新大陆NLS-MT66工业安卓PAD开发实战:从扫码枪到智能终端的认知与实现

在工业自动化和物联网领域,数据采集是连接物理世界与数字系统的关键环节。传统扫码枪通过串口或键盘口实现基础条码识别,而现代工业级智能数据采集终端(如新大陆NLS-MT66)则集成了安卓操作系统、高性能扫描引擎、多模通信与传感器,本质上是一台专为严苛环境设计的扫描PAD。其技术原理在于通过私有硬件API(而非标准摄像头接口)调用专用扫描引擎,实现毫秒级响应的条码解码,并通过事件监听机制与安卓应用框架深度集成。这种设计带来了显著的技术价值:它将移动计算能力与专业数据采集硬件结合,支持复杂业务逻辑(如实时库存管理、

weixin_33994429的博客 295

android 方向键控制,Android中控制软键盘的方法总结

Android开发中,对键盘的控制是家常便饭。我们一般通过两种方式控制键盘的行为,一种是在Activity中配置相关属性,另一种是直接调用系统提供的方法。AndroidManifest中配置AndroidManifest文件的Activity中有一个名为android:windowSoftInputMode的属性,通过配置该属性可以实现对软键盘行为的一些控制。这个属性有有以下可配置的值stateU...

weixin_39845825的博客 886

新大陆NLS-MT66安卓PAD扫描功能从Demo到实战的工程化开发指南

在移动数据采集和物联网应用中,条码扫描是核心的数据入口技术。其原理是通过扫描引擎识别条码的光学图案,将其转换为数字信息供业务系统处理。这项技术的价值在于极大提升了数据录入的准确性和效率,是连接物理世界与数字系统的关键桥梁。在仓储物流、零售收银、医疗巡检等众多行业场景中,稳定可靠的扫描功能直接影响着作业流程的顺畅度。本文聚焦于如何将新大陆NLS-MT66这类专业安卓扫描PAD的官方示例代码,深度工程化为符合**真实业务场景**需求的稳定应用。内容涵盖从**模块化架构设计**、扫描参数深度调优、到功耗管理与异常

congji3817的博客 391

新大陆NLS-MT66安卓扫描PAD开发实战:SDK集成、广播模式与性能调优

在移动数据采集领域,条码扫描是连接物理世界与信息系统的关键技术。其原理是通过图像传感器捕获条码图像,经解码算法解析为可读数据,实现快速、准确的信息录入。这项技术的核心价值在于提升物流、仓储、零售等行业的作业效率与数据准确性。针对安卓系统的工业级扫描终端,开发者通常需要集成设备厂商提供的专用SDK来调用底层硬件能力。在集成过程中,采用广播接收模式进行事件处理是一种高效且解耦的架构选择,它允许扫描结果在应用的不同组件间灵活传递。同时,针对高强度连续扫描场景,必须实施应用层的防重复逻辑与扫描参数调优,以确保系统的

weixin_33925615的博客 310

android设备添加F1-F12按键功能

2012-04-26 14:23:48|  分类: android|字号 订阅 一、首先在android4.0\frameworks\base\data\keyboards\(qwerty.kl)Generic.kl文件中做如下改变: key 59   HOME key 60   FUNCTION_F2 key 61   FUNCTION_F3 key 6

2735

android 二维码扫描,扫描完毕后关闭activity

android 二维码扫描,扫描完毕后关闭activity

Android文章目录

目录 开发环境搭建 Android 常用开源库 四大组件 Activity Activity的生命周期和启动模式 Activity工作过程分析 基于Android O(8.0) API 27 使用Intent传数据 Notification PendingIntent BrodecastReceiver 广播 BroadcastReceiver的工作原理 基于Android O(8....

我叫王哈哈 690

Android手机(设备)连接扫描枪扫码遇到的问题

以下内容以我发布前的时间为准,可能之后厂商给设备改进后都没有这些问题。 1.android手机连接扫描枪有些手机显示不了系统键盘 2.连接扫描枪使用的是百度输入法,条码是字母数字组合的扫码会出现乱码(如条码:A0011305150081;小米没有键盘的扫描出现:a0011305150081,啊1305150081,等;华为有键盘的出现:a0011305150081,0011305150081);如下图: 3.连接扫描枪不使用百度输入法,小米手机使用搜狗输入法扫码:A0011305150081,出现a0011305150081,啊!!!,等甚至影响下一个条码扫描;华为手机(输入法改为华为Swy

思科网络进阶——多生成树协议(MSTP)配置的一课一得

三、实验拓扑1)设计一个网络架构,要有核心层和接入层,都使用思科交换机。2)企业有4个部门,要求这四个部门都可以上网,但分属不同的VLAN中,这样今后可以做其它安全策略以确保网络安全,这些策略如今后学到的访问控制列表ACL。3)网络架构的设计要具有冗余,防止一条线路或一台设备终端导致的业务中断。4)由于硬件冗余而产生的环路要处理好,也就是要在逻辑上(或者说通过配置)防止物理环路的产生。5)不能因为防止物理环路而导致某端口没有流量,这样浪费端口资源及设备间互联的带宽资源。

zhu52010的博客 3400

adb使用指南

ADB(Android Debug Bridge)是Android官方提供的多功能命令行工具,支持设备连接、应用调试、文件传输等功能。连接方式分为有线和无线两种:有线连接需开启USB调试模式,无线连接需启用TCP/IP端口或配对码(Android 11+)。常用命令包括设备管理(adb devices)、应用安装卸载、文件传输(push/pull)、日志分析(logcat)、系统控制(模拟点击/按键)以及性能监控等。ADB还支持屏幕截图、录屏等高级操作,是Android开发与测试的核心工具。

2302_80219536的博客 1694

AI挖矿技术全景解析:从智能勘探到自主开采的2025年度技术演进与产业变革

随着全球关键矿产资源需求激增与开采难度加剧,人工智能(AI)技术正在重塑矿业全生命周期。本文系统综述了2025年AI挖矿技术的最新进展,涵盖从地质勘探、资源评估到自主开采、安全监控的完整技术链条。基于Elsevier 2025年发表的最新研究成果及IEEE会议前沿动态,本文深入分析了深度学习、强化学习、计算机视觉等核心技术在矿物识别、品位预测、设备维护等场景的应用机制。研究数据显示,AI技术已使勘探成功率提升45%,设备停机时间减少35%,整体运营效率提高40%以上。

nmdbbzcl的博客 2085

Introduction不是开场白,而是用户认知校准协议

在人机交互与系统工程中,'Introduction'远不止于传统意义上的功能介绍,它本质是用户首次接触系统时的认知启动机制——基于认知心理学的语境锚定、权限预期管理与操作责任分配。其设计直接影响首屏留存、权限授予率和错误恢复效率,广泛应用于IoT设备配网、B端SaaS新手引导、医疗嵌入式系统等强场景约束领域。本文聚焦‘Introduction’作为状态驱动型引导服务的技术实现,涵盖线性引导/情境唤醒/渐进披露三大范式选型、跨端动效优化(如0.3秒微缩放)、权限延迟请求策略及无障碍语音路径重构,为工程师提供可

weixin_33857230的博客 396

AI量化学习入门指南:从零开始掌握人工智能投资策略

量化投资:利用数学模型和计算机算法进行投资决策的方法算法交易:自动执行预定义交易规则的系统机器学习:让计算机从数据中学习并改进的技术回测:用历史数据检验交易策略表现的过程特征工程:将原始数据转化为模型可理解的输入过拟合:模型过度适应历史数据,导致未来表现不佳夏普比率:衡量单位风险所获得的超额收益AI量化投资不仅仅是技术的应用,更是一种理性、系统化的投资哲学。它不追求预测市场的每一个拐点,而是通过概率思维和风险管理,在不确定性的市场中寻找统计优势。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1134

Fiori Elements 的 Adapting the UI: Analytical List Page 全解析与实战

摘要:本文详细介绍了如何通过SAP Fiori elements的UI Adaptation功能对Analytical List Page(ALP)进行细粒度适配。重点讲解了页头过滤区、图表区域、表格区域等关键组件的可配置属性,包括过滤区折叠/固定、图表类型限制、表格滚动阈值等实用功能。文章强调这些适配均可通过可视化工具完成,无需修改业务代码,并提供了典型场景的实践清单。适用于SAP Fiori elements for OData V2项目,建议配合SAP Fiori tools的Adaptation E

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 438

机顶盒产线测试全流程:从SMT贴片到老化测试的底线把控

量产环境下的产品一致性,依赖于系统化的测试流程。SMT贴片、PCBA功能测试、固件烧录、整机组装、老化测试等环节环环相扣,任何疏漏都可能导致批量不良。机顶盒生产尤为考验测试底线的设计,从MAC地址写入到WiFi信号校准,从自动化判定到数据追溯,都需要严谨的工程化思维。基于真实产线经验,机顶盒从贴片到装箱的关键测试项与常见故障排查思路,是保障产品可制造性与可测试性的核心实践。

weixin_33901641的博客 634

1、基于改进3D卷积神经网络的阿尔茨海默病分类

本文提出了一种基于改进3D卷积神经网络的阿尔茨海默病(AD)分类方法,利用3D CNN对预处理后的T1加权MRI数据进行空间特征提取,并在VGG网络结构中引入类似ResNet的跳跃连接以缓解模型退化和过拟合问题。实验基于ADNI数据集,包含AD、MCI和NC三类样本,结果表明改进后的3D VGG模型在AD/NC、MCI/NC及多分类任务中均取得了优异性能,尤其在AD/MCI/NC分类中准确率达到98.50%,优于现有典型3D深度学习方法。研究验证了3D CNN在脑部疾病诊断中的有效性,并为AD的早期识别提供

kk1234的博客 90
上一篇: JNI和NDK基本概念
下一篇: 字面量的概念
我叫王哈哈
博客等级 码龄11年 36粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值