安卓6.0适配问题 (主华为 p7 p8)

最近半路接手一个项目,这项目从最开始设计的时候是没有兼容到6.0这个版本趋势.

一些普通功能还好,随着项目内功能越来越多,需求也越来越多,所以导致很多问题,

最近在一个技术交流群中,也有很多人问了类似的问题,所以特别来这里总结一波,

也希望遇到相同问题的人再看到这篇文章之后能快速解决问题.

首先来描写基于安卓6.0不做处理的话,可能会出现一些什么问题:

1.百度地图使用闪退

2.shareSDK闪退

3.有自定义相册功能的时候

现象就是白一下回到前一个界面

等等一些问题,特别是三方sdk,出问题的几率非常非常大. 当然,有的6.0机型

确不会出现这些问题,或者是很偶然出现这些问题,但是就我自己经验来说,华为 p7 

p8这两款6.0以上系统时,简直问题出现报的不要不要的.可能是因为华为的系统自

己改过得原因吧,都知道华为系统改的坑死,个人感觉比魅族还坑~~~~好吧不吐槽

了,下面上干货.

为什么会出现这些问题呢?首先我们要探讨下安卓权限机制,众所周知,安卓权限

机制一直被人诟病,所以6.0痛改前非,加入了动态获取权限的机制,也就是说,你在清单

文件中注册的权限,在跑程序的时候不一定是给与的,所以就会出现什么问题?对就是

缺少权限的问题.特别是三方skd往往需要一大堆的权限,所以出错的几率特别高.然后

就会怎么样了?

你就会被测试妹子追着说:"哥哥,哥哥,这里有问题!"

哈哈卖个萌~~~

开始的时候我也是糊涂了,一般来说在定义产品的时候如果兼容到6.0就应该做处

理的,可是半路接手的项目我就不多说了,谁叫我负责呢T T开始的时候还挺莫名的没往

这个方面想,确实坑了1个多小时,现在终于把这个坑给填上了. 现在说方法:方法就是基

于6.0动态获取权限.现在网上也有不少这方面的代码了,但是就我个人而言特别不喜欢

那种藏一半的代码了,我贴的代码都是自己确实能运用的有注释小伙伴们可以直接拿过

去用,事先说明注释不详细不关我事啊哈哈~~~~~下面是demo代码(非原创不过道理

一样,我自己标的注释)

public class MainActivity extends AppCompatActivity
{
	//回调值
    private static final int MY_PERMISSIONS_REQUEST_CALL_PHONE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
	
    public void testCall(View view)
    {
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.CALL_PHONE)
                != PackageManager.PERMISSION_GRANTED)
        {//没权限
		//动态获取权限6.0才有效果
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.CALL_PHONE},
                    MY_PERMISSIONS_REQUEST_CALL_PHONE);
        } else//有权限
        {
            callPhone();
        }
    }

    public void callPhone()
    {
        Intent intent = new Intent(Intent.ACTION_CALL);
        Uri data = Uri.parse("tel:" + "10086");
        intent.setData(data);
        startActivity(intent);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
    {
	
        if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE)//判断返回值
        {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED)//判断是否动态获取权限了
            {
                callPhone();
            } else
            {//没有动态获取权限提示用户没权限,无法使用这个功能
                // Permission Denied
                Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
            }
            return;
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值