Android小坑Android开发经验谈Android开发

4月份工作总结,包括安装包解析异常,钉钉自动打卡、发邮件等

2019-04-10  本文已影响4人  badc59a1a8c4

安装包异常主要有两个原因(排除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邮箱网页申请权限



至于其他的代码就不贴出来了,这个应用太邪恶了,用多了对身体不好

上一篇下一篇

猜你喜欢

热点阅读