前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android P专区免费开放 -- 同样的Android,不同的体验

Android P专区免费开放 -- 同样的Android,不同的体验

原创
作者头像
WeTest质量开放平台团队
修改于 2018-04-10 02:09:46
修改于 2018-04-10 02:09:46
4.4K0
举报

作者:贺国睿、朱忠凯 腾讯移动客户端开发 高级工程师

商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。

原文链接:http://wetest.qq.com/lab/view/376.html


2018年3月8日,Google推出了Android P Preview版本,并提供官方镜像下载。

为了让广大开发者能够及时了解Android P的新功能特性,提前为您的app进行良好适配,WeTest决定限时免费开放Android P Preview版本的远程调试及标准兼容功能,供开发者进行体验。

即日起,针对WeTest平台的Android P、Android Oreo专区,个人认证用户可免费获得30分钟/天远程调试、3次/天标准兼容测试额度;企业账户可获得60分钟/天远程调试、6次/天标准兼容测试额度。


此外,WeTest的技术专家就本次Android P的新特性,进行了一些简单的开发体验,供大家参考:

1..1png.png
1..1png.png

新功能特性抢先看

Android P的新功能特性集中在了UI、通知体验、室内定位、图像存储几个方面,解决了之前一直存在的痛点。例如WiFi RTT一定程度上弥补了蜂窝网络在室内环境下的定位问题,HEIC图像格式则重点解决了存储容量问题。同时,Android P也在通知丰富度及操作便捷性等功能方面有所增强和提升。

一、WiFi RTT功能——复杂地形精确导航


WiFi RTT功能是Android P新引入的一个功能,从原理上来说与蜂窝网络的定位原理一致,但这个功能极大的弥补了蜂窝网络在室内定位的短板,WiFi RTT将能够在室内提供高精度的定位,这是蜂窝网络很难做到的。

WiFi RTT是全新的功能,在android.net.wifi包下增加了rtt包,用于存放WiFi RTT相关类和接口。

WiFi RTT的API以WifiRttManager为核心,借助AP热点或WiFi,利用RTT原理完成测距,通过三个以上的测距点就能够准确地定位到设备所在位置。

WiFiRTTManager提供了测距接口,是一个异步测距操作,根据官方文档(https://developer.android.com/reference/android/net/wifi/rtt/WifiRttManager.html)说明,其测距接口如下:

void startRanging(RangingRequest request, RangingResultCallback callback, Handler handler);

注: SDK Platforms Android P Preview Revision 1的相关接口定义与此不同,但实际的官方镜像中接口与此一致,开发者需要更新最新的Android P Preview Revision 2,此版本中Google已经修正该接口。

接口中,RangingRequest通过RangingRequest.Builder构建,RangingRequest.Builder构建出RangingRequest所需要的参数可以通过WiFiManager等系统服务获取到相关的内容,如 List<ScanResult> scanResults = wifiManager.getScanResults();

以下提供一个简单的测试Demo,以供参考:

private WifiRttManager wifiRttManager;

private WifiManager wifiManager;

@Override

protected void onCreate(Bundle savedInstanceState) {

代码语言:txt
AI代码解释
复制
// ... ...
代码语言:txt
AI代码解释
复制
if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_RTT)) {
代码语言:txt
AI代码解释
复制
    Object service = this.getApplicationContext().getSystemService(Context.WIFI_RTT_RANGING_SERVICE);
代码语言:txt
AI代码解释
复制
    if(service instanceof WifiRttManager) {
代码语言:txt
AI代码解释
复制
        wifiRttManager= (WifiRttManager) service;
代码语言:txt
AI代码解释
复制
        Log.i(TAG, "Get WifiRttManager Succ.");
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
    wifiManager = (WifiManager) this.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
代码语言:txt
AI代码解释
复制
    IntentFilter wifiFileter = new IntentFilter();
代码语言:txt
AI代码解释
复制
    wifiFileter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
代码语言:txt
AI代码解释
复制
    wifiFileter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
代码语言:txt
AI代码解释
复制
    wifiFileter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
代码语言:txt
AI代码解释
复制
    registerReceiver(new WifiChangeReceiver(), wifiFileter);
代码语言:txt
AI代码解释
复制
}
代码语言:txt
AI代码解释
复制
// ... ...

private void startScanAPs() {

代码语言:txt
AI代码解释
复制
wifiManager.setWifiEnabled(true);
代码语言:txt
AI代码解释
复制
wifiManager.startScan();

}

class WifiChangeReceiver extends BroadcastReceiver {

代码语言:txt
AI代码解释
复制
@RequiresApi(api = 28)
代码语言:txt
AI代码解释
复制
@Override
代码语言:txt
AI代码解释
复制
public void onReceive(Context context, Intent intent) {
代码语言:txt
AI代码解释
复制
    if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
代码语言:txt
AI代码解释
复制
        List<ScanResult> scanResults = wifiManager.getScanResults();
代码语言:txt
AI代码解释
复制
        Log.i(TAG, "Wifi Scan size:" + scanResults.size());
代码语言:txt
AI代码解释
复制
        for(ScanResult scanResult:  scanResults) {
代码语言:txt
AI代码解释
复制
            Log.i(TAG, scanResult.toString());
代码语言:txt
AI代码解释
复制
            RangingRequest.Builder builder = new RangingRequest.Builder();
代码语言:txt
AI代码解释
复制
            builder.addAccessPoint(scanResult);
代码语言:txt
AI代码解释
复制
            wifiRttManager.startRanging(builder.build(), new RangingResultCallback() {
代码语言:txt
AI代码解释
复制
                @SuppressLint("Override")
代码语言:txt
AI代码解释
复制
                @Override
代码语言:txt
AI代码解释
复制
                public void onRangingFailure(int i) {
代码语言:txt
AI代码解释
复制
                    // TODO 
代码语言:txt
AI代码解释
复制
                }
代码语言:txt
AI代码解释
复制
                @SuppressLint("Override")
代码语言:txt
AI代码解释
复制
                @Override
代码语言:txt
AI代码解释
复制
                public void onRangingResults(List<RangingResult> list) {
代码语言:txt
AI代码解释
复制
                    // TODO get result from list
代码语言:txt
AI代码解释
复制
                    for(RangingResult result : list) {
代码语言:txt
AI代码解释
复制
                        Log.i(TAG, result.toString());
代码语言:txt
AI代码解释
复制
                    }
代码语言:txt
AI代码解释
复制
                }
代码语言:txt
AI代码解释
复制
            }, new Handler());
代码语言:txt
AI代码解释
复制
        }
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
}

}

使用WiFi RTT时,需要在AndroidManifest.xml中增加如下声明:

<uses-feature android:name="android.hardware.wifi.rtt" />

通过上面的简单代码,就能够实现WiFi RTT的功能。

WiFi RTT功能适用于复杂地形的大型室内外场所,如商场、娱乐场所、大型休闲、游乐场等等,提供场所内的局部区域精确化导航等功能。相信在很快的时间内,就能够在各大地图应用内体验到这项便利功能,对于路痴、地图盲的伙伴们将是极大的福音。

二、显示剪切——支持刘海屏


随着iPhone X的推出,“刘海屏”达到了空前的高潮。Android P里提供了对异形屏幕的UI适配兼容方案,通过DisplayCutout类提供的相关接口,能够获取到屏幕中Cutout区域的信息。

借助DisplayCutout,可以获取到如下信息:

DisplayCutout displayCutout = view.getRootWindowInsets().getDisplayCutout();

if(displayCutout != null) {

代码语言:txt
AI代码解释
复制
Region bounds = displayCutout.getBounds();
代码语言:txt
AI代码解释
复制
Log.d(TAG, String.format("Bounds:%s", bounds.toString()));
代码语言:txt
AI代码解释
复制
int top = displayCutout.getSafeInsetTop();
代码语言:txt
AI代码解释
复制
int bottom = displayCutout.getSafeInsetBottom();
代码语言:txt
AI代码解释
复制
int left = displayCutout.getSafeInsetLeft();
代码语言:txt
AI代码解释
复制
int right = displayCutout.getSafeInsetRight();
代码语言:txt
AI代码解释
复制
Log.d(TAG, String.format("Cutout edge:[left:%d, top:%d,right:%d, bottom:%d]", left, top, right, bottom));

}

public Region getBounds()能够获取到Cutout区域的所有信息,Region就是Cutout区域。

public int getSafeInsetTop()

public int getSafeInsetBottom()

public int getSafeInsetLeft()

public int getSafeInsetRight()

以上四个接口,可以获取到去除Cutout区域后的安全区域边界值。

通过上述数据,开发者能够精准的控制UI的绘制,避免将UI内容绘制到Cutout区域造成UI显示异常。

Android机器里,刘海屏目前还是极为罕见的Google为了方便开发者调试,在Android P Preview镜像中,特别提供了Cutout的支持,具体打开方式可以参考Google提供的特性说明文档cutout小节内容。

cutout小节https://developer.android.com/preview/features.html#cutout

如图所示,笔者使用手头的Pixel 2 XL体验了Android P的Cutout设置。

企业微信截图_15232745139857.png
企业微信截图_15232745139857.png

三、通知优化——操作更多样,内容更丰富


Android P在通知内容的丰富度和操作上做了优化。

最近的版本中,Android系统的通知管理方面一直优化升级,Android O提供了更细粒度的Channel功能,通知栏推送时需要指定NotificationChannel,用户可以对通知的Channel选择,只允许感兴趣的Channel推送的通知显示。通过通道设置、免打扰优化等方式,极大增强了消息体验。

增强消息体验

Android P继续改进和增强消息通知v1 。早在Android 7.0时,就提供了在通知中直接应答和输入,Android P对这一功能做了更多的增强。

Android P的通知中支持图像内容,可以通过setData()方法,给出消息的图像内容,在通知上展示給用户。

Android P同样简化了通知的配置形式。Android P中增加了Notification.Person类,用于区分同一个对话的参与者信息,如参与者的头像、URI等。根据官方说明,Android P中,通知消息的其他一些API,也使用Person替代之前的CharSequence。

简单的体验下新的API的开发:

NotificationChannel channel = new NotificationChannel("WtTestChannel",

代码语言:txt
AI代码解释
复制
                    "WtTestChannel", NotificationManager.IMPORTANCE_DEFAULT);

channel.enableLights(true); // luncher icon right corner's point

channel.setLightColor(Color.RED); // read point

channel.setShowBadge(true); // whether show this channel notification on long press icon

Notification.Builder builder =

代码语言:txt
AI代码解释
复制
    new Notification.Builder(MainActivity.this,
代码语言:txt
AI代码解释
复制
            "WtTestChannel");

Notification.Person p = new Notification.Person();

p.setName("WeTest");

p.setUri("http://cdn.wetest.qq.com/" +

代码语言:txt
AI代码解释
复制
    "ui/1.2.0/pc/static/image/newLogo-16042.png");

Notification.MessagingStyle messageStyle = new Notification.MessagingStyle(p);

Notification.MessagingStyle.Message message =

代码语言:txt
AI代码解释
复制
    new Notification.MessagingStyle.Message("WeTestMessage", 2000, p);

//show image

Uri image = Uri.parse(

代码语言:txt
AI代码解释
复制
    "http://cdn.wetest.qq.com/ui/1.2.0/pc/static/image/newLogo-16042.png");

message.setData("image/png", image);

messageStyle.addMessage(message);

builder.setStyle(messageStyle);

builder.setSmallIcon(R.mipmap.ic_launcher);

Notification notification = builder.build();

NotificationManager notifyManager =

代码语言:txt
AI代码解释
复制
    (NotificationManager) getSystemService(
代码语言:txt
AI代码解释
复制
            MainActivity.this.getApplicationContext().NOTIFICATION_SERVICE);

notifyManager.createNotificationChannel(channel);

notifyManager.notify("WeTest", 1, notification);

通道设置、广播和免打扰优化

Android P中,重点做了内容丰富上的工作,同时也对Channel的设置方面做了一些简化处理。

Android O版本里,首次推出了NotificationChannel,开发者需要配置相应的Channel,才能够推送通知給用户。用户能够更加细粒度v1 的针对App的Channel选择,而不是禁止App的所有通知内容。

而在Android P中,对通知的管理做了进一步的优化,包括可以屏蔽通道组、提供新的广播类型和新的免打扰优先级。

屏蔽通道组: 用户可以在通知设置中屏蔽App的整个通道组。开发者可以通过isBlocked()来判断某个通道组是否被屏蔽了,并根据结果,不向已经被屏蔽的通道组发送任何通知。另外,开发者可以在App中使用新接口getNotificationChannelGroup()来查询当前的通道组设置。

新的广播类型:新广播类型是针对通道和通道组的功能增加的“通道(组)屏蔽状态变化”广播。开发者App中可以对所拥有的通道(组)接收广播,并根据具体广播内容作出动作。开发者可以通过NotificationManager,查看广播相关的具体信息。针对广播的动作可以通过Broadcasts查看具体的方法和信息。

免打扰优先级: NotificationManager.Policy增加了两个新的优先级常量,PRIORITY_CATEGORY_ALARMS(警告优先),PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER (媒体、系统和游戏声音优先)。

四、支持多摄像机和相机共享


近一段时间,双摄、多摄等机型纷纷面世。双摄及多摄提供了单摄像头所无法完成的能力,如无缝缩放、散景和立体视觉。Android P在这方面也提供了系统级的API支持。

Android P提供了系统API,支持从两个或者多个物理摄像头同步获取数据流。此前OEM厂商提供的双摄设备多是厂商自行定制系统实现,此时Android P推出了API,从系统层面上制定了API规范。

新的API提供了在不同相机之间切换逻辑数据流或混合数据流的调用能力。在捕捉延迟方面,提供新的会话参数,降低初始捕捉延迟。同时,提供相机共享能力,以解决在多种使用相机的场景下重复停止、开启相机流。闪光灯方面,Android P增加基于显示的闪光灯支持。光学防抖方面,Android P向开发者提供OIS时间戳,用于图像稳定性优化以及其他特效使用。

此外,Android P还支持外部USB/UVC相机,可以使用更强大的外置摄像头模组。

五、支持图像媒体后期处理


Android P引入了新的ImageDecoder,该类除了支持对各种图片格式的解码、缩放、裁剪之外,其强大之处在于支持对解码后的图像做后期处理(post-process),使用该功能可以添加复杂的自定义特效,比如圆角,或是将图片放在圆形像框中。编写后期处理回调函数,你可以添加任何绘图指令实现需要的效果。

此外,Android P原生支持GIF和WebP格式的动图,新增了AnimagedImageDrawable类,并被新增的解码器类ImageDecoder直接支持,用法跟矢量动画类AnimatedVectorDrawable类似,实现方式也类似,通过新增渲染线程和工作线程,不需要在UI线程处理动图更新,可以说是无痛使用,非常省心。

下面通过编写代码,显示一张gif图,并利用后期处理机制,在图像中间绘制一个绿色的实心圆。

demo.gif
demo.gif

final ImageView image = (ImageView) findViewById(R.id.image);

File gifFile = new File("/data/local/tmp/test.gif");

if (!gifFile.exists()) {

Log.d(TAG, "gifFile is not exsited!");

return;

}

ImageDecoder.Source source = ImageDecoder.createSource(gifFile);

try {

代码语言:txt
AI代码解释
复制
d = ImageDecoder.decodeDrawable(source, new ImageDecoder.OnHeaderDecodedListener() {
代码语言:txt
AI代码解释
复制
    @Override
代码语言:txt
AI代码解释
复制
    public void onHeaderDecoded(ImageDecoder imageDecoder, final ImageDecoder.ImageInfo imageInfo, ImageDecoder.Source source) {
代码语言:txt
AI代码解释
复制
        imageDecoder.setPostProcessor(new PostProcessor() {
代码语言:txt
AI代码解释
复制
            @Override
代码语言:txt
AI代码解释
复制
            public int onPostProcess(Canvas canvas) {
代码语言:txt
AI代码解释
复制
                int w = imageInfo.getSize().getWidth();
代码语言:txt
AI代码解释
复制
                int h = imageInfo.getSize().getHeight();
代码语言:txt
AI代码解释
复制
                Paint paint = new Paint();
代码语言:txt
AI代码解释
复制
                paint.setAntiAlias(true);
代码语言:txt
AI代码解释
复制
                paint.setColor(Color.GREEN);
代码语言:txt
AI代码解释
复制
                canvas.drawCircle(w/2, h/2, h/4, new Paint(paint));
代码语言:txt
AI代码解释
复制
                return 0;
代码语言:txt
AI代码解释
复制
            }
代码语言:txt
AI代码解释
复制
        });
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
});
代码语言:txt
AI代码解释
复制
image.setVisibility(View.VISIBLE);
代码语言:txt
AI代码解释
复制
image.setImageDrawable(d);

} catch (IOException e){

代码语言:txt
AI代码解释
复制
Log.d(TAG, e.toString());

}

Button button = (Button) findViewById(R.id.buttonText);

button.setOnClickListener(new View.OnClickListener() {

代码语言:txt
AI代码解释
复制
@Override
代码语言:txt
AI代码解释
复制
public void onClick(View view) {
代码语言:txt
AI代码解释
复制
    if (d != null && d instanceof AnimatedImageDrawable) {
代码语言:txt
AI代码解释
复制
        AnimatedImageDrawable ad = (AnimatedImageDrawable) d;
代码语言:txt
AI代码解释
复制
        if (ad.isRunning()) {
代码语言:txt
AI代码解释
复制
            Log.d(TAG, "stop running");
代码语言:txt
AI代码解释
复制
            ad.stop();
代码语言:txt
AI代码解释
复制
        } else {
代码语言:txt
AI代码解释
复制
            Log.d(TAG, "start running");
代码语言:txt
AI代码解释
复制
            ad.start();
代码语言:txt
AI代码解释
复制
        }
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
}

});

六、支持HDR VP9和HEIF


Android P内置了对HDR VP9和HEIF(heic)图像编码的支持。HEIF是苹果在iOS11推出的一种高效压缩格式,目前在IphoneX、Iphone 8、IPhone 8P上已经支持。该格式的压缩率更高,但是编码该格式需要硬件的支持,解码并不需要。最新的支持库中的HeifWriter支持从YUV字节缓冲区、Surface或是Bitmap类转换为HEIF格式的静态图像。

Android P新引入了MediaPlayer2,支持DataSourceDesc创建的播放列表。

功能优化提升一览

一、神经网络API 1.1

在前不久发布的Android 8.1 (API level 27)上,Google首次在Android平台上推出了神经网络API,这意味着我们的Android机器智能化水平又提高了一大步。而本次Android P,进一步丰富了神经网络的支持,不仅对之前的相关API进行了优化,并且提供了9个新的操作,为具体的数据操作方面提供了更深入的支持。

二、改进表单自动填充

Android 8.0(API等级26)中引入了自动填充框架,这使得在应用中填写表单变得更加容易。 Android P引入了自动填充服务并实现了多项改进,得以在填写表单时进一步增强用户体验。

三、安全增强

Android P引入了许多新的安全功能,包括统一的指纹验证对话框和敏感交易的高确信度的用户确认。应用程序内的指纹认证UI也将会更加一致。

统一的指纹验证对话框

如果第三方APP想要使用指纹,Android系统框架为应用提供了指纹认证对话框,该功能可以提供统一的外观和使用体验,用户使用起来更放心。如果您的程序还在使用FingerprintManager,现在改用FingerprintDialog替代吧,系统来提供对话框显示。对了,在使用FingerprintDialog之前,别忘了调用hasSystemFeature()方法检查手机设备是否支持指纹。

敏感交易的高确信度的用户确认

Android P系统提供了受保护的确认API,借助这组全新的API,应用可以使用ConfirmationDialog对话框向用户提示,请求用户批准一条简短的声明, 该声明允许应用提醒用户,即将完成一笔敏感交易,例如支付。

如果用户接受声明,应用将会收到一条key-hash的消息认证码(HMAC),该签名由TEE产生,以保护用于输入和认证对话框的显示。该签名表示用于已经看到了声明并同意了。

硬件安全模块

Android P还提供了StrongBox Keymaster(强力沙盒秘钥大师),一个存储在硬件安全模块的具体实现。在这个硬件安全模块中有自己的CPU、安全存储空间,真随机数生成器,以及额外的机制抵御应用被篡改或是未授权应用的恶意加载。当检查存储在StrongBox Keymaster中的密钥时,系统通过可信执行环境(TEE)确认密钥的完整性。为了降低能耗,StrongBox支持了一组算法和不同长度的秘钥:

● RSA 2048

● AES 128 and 256

● ECDSA P-256

● HMAC-SHA256 (支持8字节到64字节任意秘钥长度)

● Triple DES 168

需要说明的是,这个机制需要硬件支持。

安全秘钥导入KeyStore

使用新的ASN.1编码的秘钥格式添加导入秘钥到Keystore,Android P提供了额外的密码解密安全能力。之后KeyMaster就可以解密KeyStore存储的秘钥,这种工作方式使得秘钥明文永远不会出现在设备内存中。这项特性要求设备支持Keymaster 4。

四、支持客户端侧Android备份加密

Android P支持使用客户端密钥对Android备份进行加密。 这项隐私措施,需要设备的PIN、图案密码或标准密码才能从用户设备备份的数据中恢复数据。

五、Accessibility优化

为了使App使用更便捷,Android在多个方面为开发者提供了易用性的优化。

Navigation semantics

Android P在App的场景切换和操作上为开发者提供了很多的优化点。

Accessibility pane titles

Android P中对Section提供了新的机制,被称为accessibility pane titles, Accessibility services能够接收这些标题的变化,使得能够对一些变化提供更加细粒度的信息。

指定Section的标题,可以通过android:accessibilityPaneTitle新属性来设置,同样运行时可以通过setAccessibilityPaneTitle()来设置标题。

顶部栏导航

Android P提供了新的顶部栏导航机制,通过设置View实例的android:accessibilityHeading属性为true,来显示逻辑标题。通过这些标题,用户就可以从一个标题导航到下一个标题,

群组导航和输出

针对屏幕阅读器,Android P对View提供了新的属性android:screenReaderFocusable代替原有的android:focusable来做标记,来解决在一些场景下为了使屏幕阅读器工作而设置View为可获取焦点的操作。这时,屏幕阅读器需要同时关注android:screenReaderFocusable和android:focusable设置为ture的View。

便捷操作

tooltips交互

Android P中,可以使用getTooltipText()去读取tooltips的文本内容。使用新的ACTION_SHOW_TOOLTIP和ACTION_HIDE_TOOLTIP控制View显示或者隐藏tooltips。

新全局交互

Android P在AccessibilityService类中提供了两个全新的操作。开发者的Service可以通过GLOBAL_ACTION_LOCK_SCREEN帮助用户锁屏,通过GLOBAL_ACTION_TAKE_SCREENSHOT帮助用户完成屏幕截图。

窗体改变的一些细节

Android P优化了在App多窗体同步发生变化时的更新内容获取。当出现TYPE_WINDOWS_CHANGED时,开发者可以通过getWindowChanges()API获取窗体变化情况。

当多窗体发生改变时,每个窗体都会发出自己的事件,开发者可以通过getSource()获取到事件窗体的根View。

如果你的App为View定义了accessibility pane titles,UI更新时你的Service就能够识别到相应的改动。当出现TYPE_WINDOW_STATE_CHANGED事件时,使用新方法 getContentChangeTypes()返回的类型,就能够获取到当前窗体的变化情况。例如,现在就能够通过上述的机制,检测到一个v1 窗格是否有了新标题,或者一个窗格的消失。

六、新的Rotation方案


旋转屏幕,是一些游戏、视频等场景必要的操作,但有一些场景,用户旋转屏幕并不是为了让应用显示从竖屏变成横屏或反过来。为了避免这种误操作,Android P提供了新的机制,开发者可以指定屏幕不随重力感应旋转,而是用户通过一个单独的按钮自行控制屏幕显示转向。


参考文档:

https://developer.android.google.cn/preview/features.html


点击链接:http://wetest.qq.com/cloud/help/AndroidP 即可限时免费体验Android P Preview版本的远程调试及标准兼容功能。

如有任何问题,或对系统的建议,请联系WeTest小助手(QQ:800024531)。

我们会将与谷歌技术专家共同为您解答。

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

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

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

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

评论
登录后参与评论
4 条评论
热度
最新
Android P专区终于免费开放了
Android P专区终于免费开放了
回复回复点赞举报
安卓7.0的路过,每次新版本出来都要等好久
安卓7.0的路过,每次新版本出来都要等好久
回复回复点赞举报
可以做向前兼容测试
可以做向前兼容测试
回复回复点赞举报
什么?又更新了吗?安卓4.4路过
什么?又更新了吗?安卓4.4路过
回复回复点赞举报
推荐阅读
Android P专区免费开放 -- 同样的Android,不同的体验
2018年3月8日,Google推出了Android P Preview版本,并提供官方镜像下载。
WeTest质量开放平台团队
2018/10/29
1.2K0
Android 9.0适配及部分新特性介绍
在最开始针对速贷进行Android9.0版本的适配时,我使用的是真机是vivo X21A,将targetSdkVersion升到28,运行发现网络请求全报400 Bad Request,查阅了网上针对android9.0网络请求问题的解决方案以及其他的一些迁移到Android9.0需注意的点(下文会讲到),做了些适配和调整,发现仍有问题,通过抓包也并没有发现问题的原因所在。随后试了下模拟器以及借来的google pixel(9.0)真机运行了下,能正常使用,并没有发现什么问题,于是猜想是机子本身系统的问题。
用户2802329
2018/12/10
3.4K0
Android 9.0适配及部分新特性介绍
Android 9.0 强势来袭,带来了哪些新特性?
谷歌今 天全量对外发布 Android 9(API级别28) 版本,吓得我赶快去官网学习一波,今天带大家展望9.0的新特性。Android 9 为用户和开发人员引入了强大的新功能。今天重点介绍新增的功能。
开发者技术前线
2020/11/23
3.6K0
Android 9 适配怎么做? “QQ音乐”优化实录
原文链接:https://wetest.qq.com/lab/view/406.html
WeTest质量开放平台团队
2018/09/23
2.4K0
Android 9 适配怎么做? “QQ音乐”优化实录
Android P 适配指南
Google自 android L (5.0) 以来就持续对安装系统进行 安全 以及 性能上的升级,此次的 android P (9.0)也不例外, 更大程度上对之前一些版本一些警告的具体落实,无论你的 Target Api 是否是 28 都将受到影响。
用户1269200
2018/10/08
3.6K0
Android P 适配指南
Android 各版本特性
5.0中使用了recyclerview代替了listview,它具有高度解耦,可以自定义样式,提供ItemAnimator,ItemDecoration,LayoutLinearLayout实现丰富多样的效果,但也有缺点,比如需要自定义列表分割线,列表点击事件也需要自己实现,列表分隔线通过继承recyclerview的ItemDecoration方法
Yif
2019/12/26
1.4K0
Android P 开发者预览版首发!
在上周的世界移动通信大会 (Mobile World Congress) 上,我们看到由开发者、设备厂商以及芯片合作伙伴组成的 Android 生态系统不断为全球用户创造美妙体验。 今天,我们要向各位介绍下一个版本的操作系统 —— Android P 的首个开发者预览版。该版本早期仅面向开发者发布,每一位开发者都是我们最信任的测评人。及时获取您的反馈意见对我们至关重要,我们会根据您的反馈优化平台来更好地满足您的开发需求。希望您可以尽早着手试用 Android P 预览版的新功能和新 API,并把您的想法和建
Android 开发者
2018/05/31
1.3K0
Android WIFI使用简述
  随着Android版本的更新,目前最新的版本是Android 13,并且已经有部分国产手机更新了此版本,对于Android开发者来说,变化其实不那么大,而对于本文章来说就有一些变化。
晨曦_LLW
2023/02/26
3.3K0
Android WIFI使用简述
Android RTT : 通过 RTT 确定 WLAN 位置信息
https://source.android.google.cn/devices/tech/connect/wifi-rtt Android 9 中的 WLAN 往返时间 (RTT) 功能允许设备测量与其他支持设备的距离:无论它们是接入点 (AP) 还是 WLAN 感知对等设备(如果设备支持 WLAN 感知功能)。此功能基于 IEEE 802.11mc 协议,使应用能够使用准确性更高的定位功能和增强的感知功能。 在位于 device// 的 device.mk 中,修改 PRODUCT_COPY_FILES 环境变量,以便支持 WLAN RTT 功能:
用户7557625
2020/07/15
2.3K0
Android Wear 开发初探
Android Wear从2014年3月发布到现在已经从1.0发展到2.0(目前还没正式发布)。其产品定位也发化了巨大变化,因为Android Wear 1.0通讯方式只有蓝牙,限定了系统,比较依赖手机。比如:重新连接新的手机,手表端会删除所有安装的应用,重新同步新手机的应用到手表。所有应用更新,系统更新都需要通过手机端来完成,没有单独的应用市场。可以理解为Android Wear手表是个手机伴侣。Android Wear 2.0定位则完全不同,Android Wear 2.0支持通讯方式有蓝牙、Wifi、
QQ音乐技术团队
2018/01/31
2.3K0
Android Wear 开发初探
Android检测网络是否可用并打开、扫描、连接WIFI
需求:要求先检查网络是否可用,如果可用就跳过网络设置界面,如果不可用就打开WIFI并扫描网络后去手动输入密码连接
程序员飞飞
2020/02/27
2.9K0
Android通知Notification使用全解析,看这篇就够了
通知是 Android 在您的应用 UI 之外显示的消息,用于向用户提供提醒、来自其他人的通信或来自您的应用的其他及时信息。用户可以点击通知打开您的应用或直接从通知中执行操作。
yechaoa
2022/06/27
6.5K0
Android通知Notification使用全解析,看这篇就够了
详解Android刘海屏适配
Apple一直在引领设计的潮流,自从 iPhone X 发布之后,”刘海屏” 就一直存在争议,本以为是一个美丽的错误(Bug),却早就了一时间“刘海屏”的模仿潮。目前,国内已经推出的刘海屏”手机有 OPPO R15 和 华为 P20,并且Google也在IO大会上提高了相应的适配方案。
xiangzhihong
2022/11/30
1.5K0
QQ 音乐 Android 吃 Pie 之路
Android P 这次有很多行为变更,其中不乏一些需要亟需适配的变更。
QQ音乐技术团队
2018/08/31
3.6K5
QQ 音乐 Android 吃 Pie 之路
Android开发笔记(六十)网络的检测与连接
APP在访问网络之前,正常都要先检测网络状态,因为如果未连接网络就上网的话,常常导致超时等待。另外,APP有时也需区分当前网络是wifi环境还是数据连接环境,如果是数据连接环境,那么为了节省流量,一般不进行下载操作也不加载大图片;如果是wifi环境,那就都可以做而不必担心消耗流量。 ConnectivityManager就是用于检测网络连接的工具类,其对象从系统服务Context.CONNECTIVITY_SERVICE中获取。该类的常用方法是getActiveNetworkInfo,调用该方法返回一个NetworkInfo对象,下面是NetworkInfo的常用方法: getType : 获取网络类型。ConnectivityManager.TYPE_WIFI表示wifi,ConnectivityManager.TYPE_MOBILE表示数据连接,ConnectivityManager.TYPE_WIMAX表示wimax,ConnectivityManager.TYPE_ETHERNET表示以太网,ConnectivityManager.TYPE_BLUETOOTH表示蓝牙。 getState : 获取网络状态。State.CONNECTING表示正在连接,State.CONNECTED表示已连接,State.SUSPENDED表示挂起,State.DISCONNECTING表示正在断开,State.DISCONNECTED表示已断开,State.UNKNOWN表示未知。 getSubtype : 获取网络子类型。当网络类型为数据连接时,子类型为2G/3G/4G的细分类型,如CDMA、EVDO、HSDPA、LTE等等。 当网络类型是wifi时,要想获取详细的wifi信息,又得使用WifiManager,该类的对象从系统服务Context.WIFI_SERVICE中获取。下面是WifiManager的常用网络检测方法: isWifiEnabled : 判断WLAN功能是否开启 setWifiEnabled : 开关WLAN功能 getWifiState : 获取当前wifi的状态。WIFI_STATE_DISABLED表示已断开,WIFI_STATE_DISABLING表示正在断开,WIFI_STATE_ENABLED表示已连上,WIFI_STATE_ENABLING表示正在连接,WIFI_STATE_UNKNOWN表示未知。 getConnectionInfo : 获取当前wifi的连接信息。该方法返回一个WifiInfo对象,WifiInfo可通过相应的get方法获取如下信息:wifi名称、路由器MAC、WIFI信号强度、连接速率、IP地址、MAC地址、网络编号等等。
aqi00
2019/01/18
4K0
网易考拉 Android 通知栏适配全方案
由于历史原因,Android在发布之初对通知栏Notification的设计相当简单,而如今面对各式各样的通知栏玩法,谷歌也不得不对其进行更新迭代调整,增加新功能的同时,也在不断地改变样式,试图迎合更多人的口味。本文总结了Android 通知栏的版本迭代过程,在通知栏开发过程中所遇到的各种各样的坑,以及一些解决技巧,特别的,对于大众期盼的Android 8.0的到来,通知栏又会发生怎样的改变呢?接下来一一进行介绍。
用户1269200
2018/12/24
5.3K0
Android11 Wifi连接流程之IP地址分配
在Android11 wifi连接流程中我们代码跟踪到了supplicant中开始associate,关联成功以后就是四次握手然后连接成功。连接成功以后还需要分配IP地址,才可以通信,这一节我们看一下IP地址的获取流程。
用户7557625
2021/09/14
3.1K0
Android11 WiFi相关代码改动记录
Android11已经发布,WiFi相关代码改动不大,在这里记录一下,方便日后做开发。
用户7557625
2021/01/18
3.1K0
android学习笔记----解决兼容8.0以上和8.0之前版本通知栏显示、振动、LED呼吸灯闪烁问题(真机验证)
真机(华为荣耀V9,8.0系统),下拉横幅需要手动打开,除非是厂家白名单,比如QQ、微信
砖业洋__
2023/05/06
6620
android学习笔记----解决兼容8.0以上和8.0之前版本通知栏显示、振动、LED呼吸灯闪烁问题(真机验证)
Android P Beta 3 现已发布!
继上个月我们发布 Android P Beta 2 及终版 API 之后,今天我们发布 Android P 的 Beta 3 版本,这是我们今年在 Android P 开发者预览版本上的又一个里程碑。在之前的更新内容中,我们已经最终完善了面向开发者的 API,现在的 Beta 3 已经非常接近我们即将在今年夏天发布的 Android P 最终版本的形态。 Android P Beta 3 包括了最新的 bug 修正,稳定性优化和一些微调,以及 2018 年 7 月发布的安全更新。我们非常推荐您现在对自己的
Android 开发者
2018/07/04
8030
相关推荐
Android P专区免费开放 -- 同样的Android,不同的体验
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档