安装包异常主要有两个原因(排除7.0 8.0适配问题):一是没有打开“安装未知来源应用”(小米5 vivo x7等机型,虽然是在8.0才有的适配),二是在安装过程中关闭了程序比如调用了System.exit(0);之类的,这种情况只在部分华为手机出现。
private void InstallApp(File result) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//判断是否是AndroidN以及更高的版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Uri contentUri = FileProvider.getUriForFile(YetuApplication.getInstance(), BuildConfig.APPLICATION_ID + ".fileProvider", result);//7.0适配
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {
intent.setDataAndType(Uri.fromFile(result), "application/vnd.android.package-archive");
}
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
YetuApplication.getInstance().startActivity(intent);
nm.cancel(notifyId);
// System.exit(0); 把这个代码清掉能解决问题二
}
下面是8.0适配,提醒用户打开安装权限
private void updateApp() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
boolean haveInstallPermission = false;
haveInstallPermission = YetuApplication.getInstance().getPackageManager().canRequestPackageInstalls();
if (!haveInstallPermission) {
//权限没有打开则提示用户去手动打开
YetuDialog.showAlert(this, "请前往开启安装权限", "去开启", new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
Uri packageURI = Uri.parse("package:" + YetuApplication.getInstance().getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
startActivityForResult(intent, INSTALL_PERMISS_CODE);
}
});
} else {
goDownloadApp();
}
} else {
goDownloadApp();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == INSTALL_PERMISS_CODE) {
goDownloadApp();
}
}
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
关于钉钉自动打卡,网上有很多,不过大多过时了,现在钉钉将一些重要的模块换成了webview我们就算拿到节点信息也不能模拟点击了。参考了很多资料,才用的是利用钉钉极速打卡规则,通过发送QQ指令,在固定时间内唤醒钉钉。不过网上的demo下载下来有些参数设置的不对,截图和邮件通知打卡结果的代码需要root才能生效,这边做了一些改动。
网上的很多截屏方式其实是通过将activity或者view的试图bitmap化来实现,但是现在我们要截取的是钉钉的截图不是本应用截图,是没办法这样做的,通过模拟点击音量键和电源键的方法又比较麻烦,所以这里采用的是比较取巧的办法,比如小米5有三个手指同时下滑截屏的快捷键,代码如下
/**
* 模拟小米三个手指同时下滑截屏(仅适用于小米)
*/
public static void XiaoMiScreenCapture(AccessibilityService service) {
Path path1 = new Path();
path1.moveTo(150, 400);
path1.lineTo(150, 800);
Path path2 = new Path();
path2.moveTo(300, 400);
path2.lineTo(300, 800);
Path path3 = new Path();
path3.moveTo(450, 400);
path3.lineTo(450, 800);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
GestureDescription.Builder builder = new GestureDescription.Builder();
GestureDescription gestureDescription = builder
.addStroke(new GestureDescription.StrokeDescription(path1, 0, 1000))
.addStroke(new GestureDescription.StrokeDescription(path2, 0, 1000))
.addStroke(new GestureDescription.StrokeDescription(path3, 0, 1000))
.build();
service.dispatchGesture(gestureDescription, new AccessibilityService.GestureResultCallback() {
@Override
public void onCompleted(GestureDescription gestureDescription) {
super.onCompleted(gestureDescription);
}
@Override
public void onCancelled(GestureDescription gestureDescription) {
super.onCancelled(gestureDescription);
}
}, null);
}
}
QQ邮箱支持smtp需要注册满15天,到qq邮箱网页申请权限
至于其他的代码就不贴出来了,这个应用太邪恶了,用多了对身体不好
网友评论