## 1、Android Studio中 安卓模拟器不能联网的解决方案
方案一:
之前做测试的时候发现虚拟机无法联网(浏览器打开 www.baidu.com, 显示 403 forbidden); 解决方案:关闭已经打开的虚拟机,进入到 SDK 安装目录下,按住 shift 鼠标右键,选择 “在此处打开 powerShell 窗口”,然后执行:emulator -avd Nexus_5X_API_27 -prop net.eth0.dns1=192.168.2.1 (Nexus_5X_API_27 是模拟器的名字)
方案二:
自己的 PC 机可以上网,而运行在 PC 机上面的 android 模拟器却不能上网。是因为 PC 机的 DNS 一般为:192.168.1.1,这个只是一般而言,不是绝对,这个得自己使用 ipconfig /all 命令检查下; 而模拟器默认的 DNS 为:10.0.2.3,那么模拟器跟自己的 PC 就不在同一个网段了,使用就导致自己的 PC 机可以上网, 而模拟器不能上网,下面就简单介绍下如何设置才能让模拟器也可以上网:
首先,如果没有配置 sdk 的环境变量的,那么在 CMD 命令下进入 sdk 安装路径的 tools 目录下 (4.0 应该是进入 platform_tools 目录下),然后使用 adb shell 命令,如果配置了 sdk 的环境变量的, 那么直接在 CMD 窗口中输入 adb shell,如:C:Documents and SettingsAdministrator>adb shell 然后输入:getprop 查看系统当前的各项属性,得到模拟器的 DNS 地址,如下: 下面就是使用 setprop 命令把模拟器的 DNS 改为自己 PC 的 DNS,例如:192.168.1.1 setprop net.dns1 192.168.1.1
## 2、Intel HAXM下载和安装
方法:
启动android SDK,在Extras目录的最下边,勾选Intel HAXM项,并下载。 下载完成后,还需要运行安装程序来进行安装,HAXM的下载目录为: SdkextrasintelHardware_Accelerated_Execution_Manager ,运行 intelhaxm-android.exe 进行安装, 根据屏幕提示,一步一步安装即可。
## 3、由于 Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。
说明:
如果当前应用的请求是 htttp 请求,而非 https ,这样就会导系统禁止当前应用进行该请求,如果 WebView 的 url 用 http 协议,同样会出现加载失败,https 不受影响。 为此,OkHttp3 做了检查,所以如果使用了明文流量,默认情况下,在 Android P 版本 OkHttp3 就抛出异常: CLEARTEXT communication to " host " not permitted by network security policy
方法:
1:在 res 下新建一个 xml 目录,然后创建一个名为:network_security_config.xml 文件 ,该文件内容如下:
代码语言:txt复制<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
然后在 AndroidManifest.xml application 标签内应用上面的xml配置:
代码语言:txt复制<application
android:name=".App"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/AppTheme"></application>
2.服务器和本地应用都改用 https (推荐)
Fragment调用Activity中的方法,很简单
假如 父Activity的类名叫 ParentActivity,有一个test()方法
在Fragment中调用其实很简单,代码如下:
代码语言:txt复制ParentActivity parentActivity = (ParentActivity ) getActivity();
parentActivity.test();
第二种,接口回调
Fragment中定议:
代码语言:txt复制public interface notification{
void sentNotification(final String toastStr);
}
让Activity实现它
然后在Fragment中在要调用Activity的方法这么写:
代码语言:txt复制if(getActivity()instanceof notification){
((notification)getActivity()).sentNotification(toastStr);
}
## 4、Android 8.0: java.lang.IllegalStateException: Not allowed to start service Intent
Android 8.0 还对特定函数做出了以下变更:
(1)如果针对 Android 8.0 的应用尝试在不允许其创建后台服务的情况下使用 startService() 函数,
则该函数将引发一个 IllegalStateException。新的 Context.startForegroundService() 函数将启动一个前台服务。
否则触发异常:不能开启服务。
(2)即使应用在后台运行,系统也允许其调用 Context.startForegroundService()。不过,
应用必须在创建服务后的五秒内调用该服务的 startForeground() 函数。在service里调用。
否则触发异常:ANR。
注意:使用时需要添加权限:<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>