android 6.0 :
1.运行时权限
2. 增加低电耗模式和应用待机模式
3. 取消支持 Apache HTTP 客户端
4. 移除硬件标识符访问权
5. WLAN 和网络连接变更
6. 相机服务变更
ps: 相机权限:
1.在Manifest中声明所需权限:
<uses-permission android:name="android.permission.CAMERA"/>
2.调用ContextCompat.checkSelfPermission()检查权限:
checkSelfPermission()方法接受两个参数。第一个参数为Context对象,第二个参数为需要进行检查的权限,类型为String。返回值是一个int常量,返回PackageManager.PERMISSION_GRANTED表示权限已经被授予,返回PackageManager.PERMISSION_DENIED表示权限未被授予。
if(ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
//权限未授予,调用requestPermission()申请权限
}else{
//权限已授予
}
3.如果权限未被授予,调用ActivityCompat.requestPermissions()申请权限:
requestPermissions()接受三个参数,第一个参数是Context对象,第二个参数是一个String数组,可以同时申请多个权限,第三个参数是请求码。
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA}, MY_REQUEST_CODE);
4.重写Activity的onRequestPermissionsResult()处理申请回调:
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_REQUEST_CODE: {
if (grantResults.length > 0 &&
grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//用户允许该权限
} else {
//用户拒绝该权限
}
return;
}
}
}
其中requestCode就是请求码,在这里就是上面的MY_REQUEST_CODE,permissions就是申请的权限,grantResults是请求的结果,数组大小与permissions对应。由于我们只请求了一个CAMERA权限,所以只需要看grantResults的第一个值就好了,根据结果做出相应的操作
比较好用的封装库RxPermission。
android 7.0
1:私有文件访问权限更改
2:多窗口支持(分屏显示)
3:通知增强功能
4:随时随地低电耗模式
5:多语言区域支持,更多语言
6:新增的表情符号
7:Chrome 和 WebView 配合使用
8:APK signature scheme v2
私有文件:
如果尝试传递 file:// Uri来访问其他应用的私有文件会触发 FileUriExposedException异常,分享私有文件内容的推荐方法是使用 FileProvider,FileProvider是v4包下的一个类,继承自ContentProvider。所以可以猜测通过FileProvider对外公开的uri就是content://开头的。
拍照后的文件
在 res/xml 目录下新建一个 xml 文件,用于存放应用需要共享的文件目录,这里我命名为file_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path
name="my_images"
path="./images/"/>
</paths>
name是自定义的一个别名,path是这个共享的目录,这里的path值表示共享外部私有目录file/images下的文件。如果是输入的是"."则表示共享外部私有目录下的file/目录下的所有文件。
其中元素有以下几个子节点:
:内部存储空间应用私有目录下的 files/ 目录,等同于 Context.getFilesDir() 所获取的目录路径
:内部存储空间应用私有目录下的 cache/ 目录,同于 Context.getCacheDir() 所获取的目录路径;
:外部存储空间根目录,等同于 Environment.getExternalStorageDirectory() 所获取的目录路径;
外部存储空间应用私有目录下的 files/ 目录,等同于 Context.getExternalFilesDir(null) 所获取的目录路径;
:外部存储空间应用私有目录下的 cache/ 目录,等同于 Context.getExternalCacheDir();
.在AndroidManifest中声明FileProvide:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.FileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
authorities的名字可自定义,一般为包名+FileProvide,resource就是刚刚新建的共享文件
android 8.0 :
(1):通知渠道
(2):启动图标
(3):统一的布局外边距和内边距
(4):自动填充框架
(5):画中画模式
(6):多显示器支持
(7):媒体增强功能
通知渠道:
.创建通知渠道
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel newsChannel = new NotificationChannel(CHANNEL_NEWS, "新闻",
NotificationManager.IMPORTANCE_HIGH);
NotificationChannel adsChannel = new NotificationChannel(CHANNEL_ADS, "广告",
NotificationManager.IMPORTANCE_DEFAULT);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.createNotificationChannel(newsChannel);
manager.createNotificationChannel(adsChannel);
}
NotificationChannel对象就代表着一个通知渠道,构造方法接受三个参数,第一个参数是全局唯一的渠道id,String类型。第二个是渠道名称,注意这个名称给用户看的。第三个是通知的重要等级。这里我们调用createNotificationChannel()创建了两个渠道,新闻和广告。注意:通知渠道不会重复创建,创建过程可以放在Application中进行。运行上面的代码后,渠道就创建好了
public void sendNews(View view) {
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this, CHANNEL_NEWS)
.setContentTitle("法国获得2018世界杯冠军")
.setContentText("法国夺冠克罗地亚虽败犹荣比利时季军")
.setAutoCancel(true)
.build();
manager.notify(1, notification);
}
public void sendAds(View view) {
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this, CHANNEL_ADS)
.setContentTitle("收到某新闻来自拼多多的广告")
.setContentText("这是它的广告内容...")
.setAutoCancel(true)
.build();
manager.notify(1, notification);
}
public void sendNoChannel(View view) {
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("没有渠道的通知")
.setContentText("通内容")
.setAutoCancel(true)
.setSmallIcon(R.mipmap.ic_launcher)
.build();
manager.notify(1, notification);
}
作者:养生阿华田
来源:优快云
原文:https://blog.youkuaiyun.com/weixin_38261570/article/details/81046352
版权声明:本文为博主原创文章,转载请附上博文链接!
android 9.0 :
App Actions
这个特性推荐使用AI进行操作。AI会尝试找出你接下来要做什么,以及你接下来需要什么,当你启动app抽屉时,它会告诉你。根据你的当前地理位置、一天中的某个时间段,甚至是你连接耳机的时候,向你推荐一些东西。还有位于应用程序抽屉中的快捷键可以预测你将要做什么,这样你就可以更快地完成你在手机上要做的事情。例如,如果你通常打开应用程序面板,然后打开手机应用程序,然后给你的好朋友打电话。在Android Pie上,你最终会看到打开这个应用程序后,就开始建议你给好友电话。
New gesture navigation(新的手势导航栏)
Manual rotation(手动旋转)
Security and privacy features(安全和隐私特性)
9.0 可参考 连接https://blog.youkuaiyun.com/hejjunlin/article/details/81489690
作者:逆流的鱼yuiop
来源:优快云
原文:https://blog.youkuaiyun.com/hejjunlin/article/details/81489690
版权声明:本文为博主原创文章,转载请附上博文链接!