安卓开发问题记录01

2024-08-19 08:34:48 浏览数 (2)

## 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"/>

0 人点赞