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 权限程序崩溃,扫二维码崩溃与按键事件相关推荐

  1. 小程序:扫二维码跳转小程序

    文章目录 扫二维码跳转小程序 条件 方法一 把小程序发布到线上 生成二维码 参考 方法二:跳转到小程序指定页面 测试范围 附加:小程序获取二维码中的数据 扫二维码跳转小程序 条件 你的小程序必须要上线 ...

  2. 微信小程序实现扫二维码时仿微信扫码音效

    需求分析:使用wx.scanCode时无交互感,对用户来说没有反馈,故增加扫码成功时震动及播放微信扫码音效 // index.html <view bindtap="scanCode& ...

  3. android 实现扫二维码以及进相册选择图片进行扫描

    项目中遇到的扫二维码功能,此博客用于记载 1.首先我们在studio里面加上二维码扫描的依赖库zing包 compile 'cn.yipianfengye.android:zxing-library: ...

  4. Android用Zxing扫二维码/生成二维码功能

    新年已过,一切恢复真正常,新的一年给自己几句指引: 光努力还不行,方向很重要. 总是想着最坏的结果,就会让人失去改变的勇气. 你当然有权利选择自己的人生--但只有在你真正强大后,逆行的阻力才会降到最小 ...

  5. Android | 教你如何开发扫二维码功能

    华为机器学习服务(ML Kit) 提供机器学习套件,为开发者应用机器学习能力开发各类应用提供优质体验.得益于华为长期技术积累,ML Kit 为开发者提供简单易用.服务多样.技术领先的机器学习能力,助力 ...

  6. 基于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 ...

  7. 像扫二维码一样的快速录入银行卡信息

    随着互联网以及各种创新科技的发展,互联网金融正经历着前所未有的大变革.从传统到智能,互联网金融不是互联网和金融业的简单结合,而是为适应不同需求产生的新模式.OCR识别技术作为人工智能的一部分,无论在工 ...

  8. 小程序画布合成二维码海报图,并保存到相册

    小程序画布合成二维码海报图,并保存到相册 实现效果如下图: 步骤分析 1,先获取需要合成的海报和二维码. 2,获取图片的本地路径,如果图片不是网络连接则不需要此操作. 3,通过手机型号,根据屏幕的大小 ...

  9. 安卓手机扫二维码从FTP服务器下载apk

    安卓手机扫二维码从FTP服务器下载apk Devops平台的APP下载页面: Linux服务器的FTP目录下的apk包: Controller层: /*** getFtpApk:安卓下载FTP上的ap ...

最新文章

  1. 计算机在线声音,电脑怎么在线录音
  2. STM32 HAL库--串口的DMA(发送、接收)和esp8266 wifi模组发送和接收封装函数
  3. Clion生成动态链接库.dll
  4. python字符串输入_python如何输入字符串
  5. 全志A33-linux内核early_printk分析及使用
  6. RPC简介及框架选择
  7. PHP 常用设计模式 (转载)
  8. 一张图看懂华为2019年年报
  9. 信息安全——对称算法与非对称算法
  10. 数据通过蓝牙传输中...70.46k/s
  11. 电脑C盘的大小影响电脑正常使用吗?
  12. iOS开发之isa、superclass(课程总结)
  13. java 有界泛型_JAVA泛型中的有界类型(extends super)
  14. 基于asp.net固定资产管理系统设计
  15. python 公众号引流_公众号粉丝从0到1000的引流思路
  16. centos下压缩文件7z解压
  17. delphi盒子希腊打开潘多拉魔盒?债务重组或是唯一出
  18. php 编写桌面程序_PHP能开发桌面应用吗?
  19. outlook邮箱链接如何用ie打开_Outlook手机邮箱配置文档
  20. 亳州工业学校计算机,2018亳州市中专讲师助讲专业技术职务评审结果公示

热门文章

  1. Java学习笔记15. 形式参数与实际参数
  2. 智能优化算法——粒子群算法原理与仿真程序
  3. oracle数据库offline,Oracle表空间Offline的三种参数详述
  4. AI落地项目一:量化交易
  5. 设置Ubuntu-18息屏时间
  6. 【idea编译错误】IDE 编译报错: Dangling metacharacter
  7. 装修家装设计施工现场工地进度小程序
  8. 基于php家装设计平台交易管理系统
  9. 6分钟弄清啥叫“三层交换”(每天学一招,积少成多)
  10. 我如何为家居装饰品牌建立最快的电子商务商店[PART 2]