Advertisement

android 学习中遇到的知识点(杂)

阅读量:

1. 用xml 合成图片

ic_launcher.xml 作用:将两个图片组合成一个图片,一个背景图,一个icon

复制代码
 <?xml version="1.0" encoding="utf-8"?>

    
 <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    
     <background android:drawable="@mipmap/ic_launcher_background"/>
    
     <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
    
 </adaptive-icon>

------生成了

2. Android中的app忽略电池优化

当使用环信SDK进行集成时,在访问该页面后,默认状态会显示一条提示对话框。如果您希望取消此默认提示,请前往项目配置界面并删除相应的配置项设置即可。

复制代码
     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

    
         String packageName = getPackageName();
    
         PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    
         if (!pm.isIgnoringBatteryOptimizations(packageName)) {
    
             try {
    
                 //some device doesn't has activity to handle this intent
    
                 //so add try catch
    
                 Intent intent = new Intent();
    
                 intent.setAction(android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
    
                 intent.setData(Uri.parse("package:" + packageName));
    
                 startActivity(intent);
    
             } catch (Exception e) {
    
             }
    
         }
    
     }

这个功能在manifest文件中配置了权限:

复制代码
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>

3. android9.0新特性:

1)启动前台服务

在Android 8.x版本中对后台进程进行了严格管理,在开启后必须激活通知权限才能实现这些功能;而从版本9.x开始就无法绕过权限检查问题。具体来说,在9.x系统中会报错'Permission Denial: startForeground requires android.permission.FOREGROUND_SERVICE'。

解决办法是在AndroidManifest中添加

复制代码
     <!--android 9.0上使用前台服务,需要添加权限-->

    
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

在随后启动服务的过程中同样需要进行相应的处理步骤。如果不进行这些处理操作,则会导致程序在启动服务时遇到不允许的情况并抛出一个异常:java.lang.IllegalStateException: Not allowed to start service Intent

复制代码
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

    
         context.startForegroundService(intent);
    
     } else {
    
         context.startService(intent);
    
     }

(2)Android 9.0强制使用https

Android 9.0强制要求应用采用HTTPS,并可能导致所有HTTP请求暂时无法处理。当应用依赖的第三方SDK包含HTTP功能时,请确保提前处理这些请求以避免阻塞现象发生。遇到UnknownServiceException: CLEARTEXT通信至本地host被网络安全策略禁止IOException java.io.IOException: Cleartext HTTP流量至*未获允许时,请立即检查并采取相应措施以解除相关安全限制。

解决方法:

在AndroidManifest文件中的application属性采用 Cleartext Traffic 传输模式

参考文献:Android App兼容8.0和9.0

4. 拨打电话:

跳转到拨号界面:

复制代码
     public void callPhone(String phoneNum) {

    
     Intent intent = new Intent(Intent.ACTION_DIAL);
    
     Uri data = Uri.parse("tel:" + phoneNum);
    
     intent.setData(data);
    
     getContext().startActivity(intent);
    
     }

直接拨打电话:

复制代码
 public void callAction(String telPhone) {

    
     Intent intent = new Intent(Intent.ACTION_CALL);
    
     Uri data = Uri.parse("tel:" + telPhone);
    
     intent.setData(data);
    
     getContext().startActivity(intent);
    
 }

全部评论 (0)

还没有任何评论哟~