前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安卓开发问题记录01

安卓开发问题记录01

原创
作者头像
china马斯克
发布2024-08-19 08:34:48
1260
发布2024-08-19 08:34:48
举报
文章被收录于专栏:知识分享

## 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 Settings\Administrator>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的下载目录为: Sdk\extras\intel\Hardware_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"/>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ## 1、Android Studio中 安卓模拟器不能联网的解决方案
  • ## 2、Intel HAXM下载和安装
  • ## 3、由于 Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。
  • ## 4、Android 8.0: java.lang.IllegalStateException: Not allowed to start service Intent
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档