手机权限部分
1.动态获取权限
在Android6.0以后,我们不仅需要在AndroidMainfest里面静态配置权限,而且需要通过代码来动态获取,这是为了保障手机的安全性。
这里以拍照权限的动态获取为例子:
if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions((Activity) PostShareActivity.this, new String[]{Manifest.permission.CAMERA}, 1);
} else {
//权限已经被授予,在这里直接写要执行的相应方法即可
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 指定调用相机拍照后照片的储存路径
//intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
startActivityForResult(intent, PHOTO_REQUEST_TAKEPHOTO);
}
如果要获取其他权限,修改相应的权限以及权限请求码即可。
2.访问手机里面的文件
在Android 10后,不仅需要配置静态文件,即在AndroidMainfest文件配置如下:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
还需要在application里里面添加:
android:requestLegacyExternalStorage=true
3.获取网络权限
在AndroidMainfest里面添加如下:
<uses-permission android:name="android.permission.INTERNET" />
同时在values文件夹下新建文件夹xml,并新增文件network_secuirity_config,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
然后再AndroidMainfest里面的application里面添加
android:networkSecurityConfig="@xml/network_secuirity_config"
常用控件部分
1.RecyclerView的数据更新
我们在使用recyclerView过程中,经常会遇到recyclerview里面数据不能立马更新的情况,通常要自己刷新一次才会刷新。
原因其实跟它的机理有关,recyclerview要实现数据更新,得保证它适配器里面的数据改变了,这样才行,通常有两种解决方法:
- 重新构造一个适配器,将修改后的数据传进去
MyAdapter adapter = new MyAdapter(datas,context);
recyclerView.setAdapter(adapter);
- 在适配器里面添加如下代码:
public void updateData(List<SharePiece> datas1){
datas=datas1;//相当于改变了datas里面的内容,这里的datas是适配器的数据源
notifyDataSetChanged();
}
然后在更新位置做如下处理:
adapter.updeData(datas);//datas为修改后的数据
第一种有一点不足,就是当数据过多时,这样操作会回到recyclerView的最顶端。