admin管理员组文章数量:1586182
极光推送+服务下载+静默安装
今年进入了一家新公司,项目的难点是静默更新和超大屏幕适配,屏幕适配使用约束布局来做不算什么问题,而静默更新这块就需要研究一下了,在网上有很多讲静默更新的,写得很好,不过都不是很完整,这里总结一下,再加上极光推送和下载内容做了一个小demo。
零、准备工作
0.1第三方库
implementation 'io.reactivex.rxjava2:rxjava:2.2.2'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.squareup.okio:okio:2.0.0'
0.2权限
<uses-permission android:name="android.permission.INTERNET" />
<!-- 写入权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- 安装未知来源应用的权限 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
0.3动态授权(需要在第一个Activity检测权限)
public class PermissionsActivity extends BaseActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_permissions);
}
@Override
public void init() {
}
@Override
public void event() {
}
/**
* 需要在第一个Activity进行检测的权限数组
*/
protected String[] needPermissions = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
private static final int PERMISSON_REQUESTCODE = 0;
/**
* 判断是否需要检测,防止不停的弹框
*/
private boolean isNeedCheck = true;
@Override
protected void onResume() {
try{
super.onResume();
if (Build.VERSION.SDK_INT >= 23) {
if (isNeedCheck) {
checkPermissions(needPermissions);
}else {
isNeedCheck = true;
}
}else {
//小于23直接进入
startActivity(LogoActivity.class);
finish();
}
}catch(Throwable e){
e.printStackTrace();
}
}
/**
* @param
* @since 2.5.0
*/
@TargetApi(23)
private void checkPermissions(String... permissions) {
try{
if (Build.VERSION.SDK_INT >= 23 && getApplicationInfo().targetSdkVersion >= 23) {
List<String> needRequestPermissonList = findDeniedPermissions(permissions);
if (null != needRequestPermissonList && needRequestPermissonList.size() > 0) {
try {
String[] array = needRequestPermissonList.toArray(new String[needRequestPermissonList.size()]);
Method method = getClass().getMethod("requestPermissions", String[].class, int.class);
method.invoke(this, array, 0);
} catch (Throwable e) {
e.printStackTrace();
}
}else {
//全部授权
startActivity(LogoActivity.class);
finish();
}
}
}catch(Throwable e){
e.printStackTrace();
}
}
/**
* 获取权限集中需要申请权限的列表
*
* @param permissions
* @return
* @since 2.5.0
*/
@TargetApi(23)
private List<String> findDeniedPermissions(String[] permissions) {
try{
List<String> needRequestPermissonList = new ArrayList<>();
if (Build.VERSION.SDK_INT >= 23 && getApplicationInfo().targetSdkVersion >= 23) {
for (String perm : permissions) {
if (checkMySelfPermission(perm) != PackageManager.PERMISSION_GRANTED
|| shouldShowMyRequestPermissionRationale(perm)) {
needRequestPermissonList.add(perm);
}
}
}
return needRequestPermissonList;
}catch(Throwable e){
e.printStackTrace();
}
return null;
}
private int checkMySelfPermission(String perm) {
try {
Method method = getClass().getMethod("checkSelfPermission", String.class);
return (Integer) method.invoke(this, perm);
} catch (Throwable e) {
e.printStackTrace();
}
return -1;
}
private boolean shouldShowMyRequestPermissionRationale(String perm) {
try {
Method method = getClass().getMethod("shouldShowRequestPermissionRationale", String.class);
return (Boolean) method.invoke(this, perm);
} catch (Throwable e) {
e.printStackTrace();
}
return false;
}
/**
* 检测是否说有的权限都已经授权
*
* @param grantResults
* @return
* @since 2.5.0
*/
private boolean verifyPermissions(int[] grantResults) {
try{
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}catch(Throwable e){
e.printStackTrace();
}
return true;
}
@TargetApi(23)
public void onRequestPermissionsResult(int requestCode,@NotNull String[] permissions, @NotNull int[]
本文标签: 极光
版权声明:本文标题:极光推送+服务下载+静默安装 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1727973946a1140472.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论