android 6.0 权限程序崩溃,扫二维码崩溃与按键事件
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);}// 用户权限 申请 的回调方法@Overridepublic 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();//进行正常操作}}}}
android 6.0 权限程序崩溃,扫二维码崩溃与按键事件相关推荐
- 小程序:扫二维码跳转小程序
文章目录 扫二维码跳转小程序 条件 方法一 把小程序发布到线上 生成二维码 参考 方法二:跳转到小程序指定页面 测试范围 附加:小程序获取二维码中的数据 扫二维码跳转小程序 条件 你的小程序必须要上线 ...
- 微信小程序实现扫二维码时仿微信扫码音效
需求分析:使用wx.scanCode时无交互感,对用户来说没有反馈,故增加扫码成功时震动及播放微信扫码音效 // index.html <view bindtap="scanCode& ...
- android 实现扫二维码以及进相册选择图片进行扫描
项目中遇到的扫二维码功能,此博客用于记载 1.首先我们在studio里面加上二维码扫描的依赖库zing包 compile 'cn.yipianfengye.android:zxing-library: ...
- Android用Zxing扫二维码/生成二维码功能
新年已过,一切恢复真正常,新的一年给自己几句指引: 光努力还不行,方向很重要. 总是想着最坏的结果,就会让人失去改变的勇气. 你当然有权利选择自己的人生--但只有在你真正强大后,逆行的阻力才会降到最小 ...
- Android | 教你如何开发扫二维码功能
华为机器学习服务(ML Kit) 提供机器学习套件,为开发者应用机器学习能力开发各类应用提供优质体验.得益于华为长期技术积累,ML Kit 为开发者提供简单易用.服务多样.技术领先的机器学习能力,助力 ...
- 基于JavaSSM和微信小程序的智能二维码门禁管理系统
目录 1 引言 2 2 系统需求分析 2 2.1开发环境 2 2.2关键技术 2 2.2.1 Spring 框架 2 2.2.2 Spring MVC 框架 3 2.2.3 Mybatis 3 2.2 ...
- 像扫二维码一样的快速录入银行卡信息
随着互联网以及各种创新科技的发展,互联网金融正经历着前所未有的大变革.从传统到智能,互联网金融不是互联网和金融业的简单结合,而是为适应不同需求产生的新模式.OCR识别技术作为人工智能的一部分,无论在工 ...
- 小程序画布合成二维码海报图,并保存到相册
小程序画布合成二维码海报图,并保存到相册 实现效果如下图: 步骤分析 1,先获取需要合成的海报和二维码. 2,获取图片的本地路径,如果图片不是网络连接则不需要此操作. 3,通过手机型号,根据屏幕的大小 ...
- 安卓手机扫二维码从FTP服务器下载apk
安卓手机扫二维码从FTP服务器下载apk Devops平台的APP下载页面: Linux服务器的FTP目录下的apk包: Controller层: /*** getFtpApk:安卓下载FTP上的ap ...
最新文章
- 计算机在线声音,电脑怎么在线录音
- STM32 HAL库--串口的DMA(发送、接收)和esp8266 wifi模组发送和接收封装函数
- Clion生成动态链接库.dll
- python字符串输入_python如何输入字符串
- 全志A33-linux内核early_printk分析及使用
- RPC简介及框架选择
- PHP 常用设计模式 (转载)
- 一张图看懂华为2019年年报
- 信息安全——对称算法与非对称算法
- 数据通过蓝牙传输中...70.46k/s
- 电脑C盘的大小影响电脑正常使用吗?
- iOS开发之isa、superclass(课程总结)
- java 有界泛型_JAVA泛型中的有界类型(extends super)
- 基于asp.net固定资产管理系统设计
- python 公众号引流_公众号粉丝从0到1000的引流思路
- centos下压缩文件7z解压
- delphi盒子希腊打开潘多拉魔盒?债务重组或是唯一出
- php 编写桌面程序_PHP能开发桌面应用吗?
- outlook邮箱链接如何用ie打开_Outlook手机邮箱配置文档
- 亳州工业学校计算机,2018亳州市中专讲师助讲专业技术职务评审结果公示