长按二维码图片进行相应操作

由于近期项目需要,在关于页面有一张二维码图,长按码图跳转微信页面进入公众号以及做相应操作:
但是好像不能直接进入公众号页面只能跳转到微信页面通过微信的扫一扫进入

直接贴代码:

设置监听

 mAboutUsBinding.ivGzh.setOnLongClickListener(this);

    @Override
    public boolean onLongClick(View v) {
        Bitmap obmp = ((BitmapDrawable) (mAboutUsBinding.ivGzh).getDrawable()).getBitmap();
        int width = obmp.getWidth();
        int height = obmp.getHeight();
        int[] data = new int[width * height];
        obmp.getPixels(data, 0, width, 0, 0, width, height);
        RGBLuminanceSource source = new RGBLuminanceSource(width, height, data);
        BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source));
        QRCodeReader reader = new QRCodeReader();
        Result re = null;
        try {
            re = reader.decode(bitmap1);
        } catch (NotFoundException e) {
            e.printStackTrace();
        } catch (ChecksumException e) {
            e.printStackTrace();
        } catch (FormatException e) {
            e.printStackTrace();
        }
        if (re == null) {
            showAlert(obmp);
        }
        else {
            showSelectAlert(obmp, re.getText());
        }
        Log.e(TAG, "onLongClick: "+ re.getText());
        return false;
    }

 /**
     * 显示Dialog
     * param v
     */
    private void showAlert(final Bitmap bitmap) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("保存图片")
                .setCancelable(false)
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterfacem, int i) {
                        if (mImageUrl==null){
                            mImageUrl = BitmapUtil.saveBitmap(AboutUsActivity.this, bitmap);
                            ToastUtils.show("保存成功");
                        }else {
                            ToastUtils.show("图片已在本地存在");
                        }
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterfacem, int i) {
                    }
                });
        builder.show();
    }
    /**
     * 显示Dialog
     * param v
     */
    private void showSelectAlert(final Bitmap bitmap, final String url) {
        String[] items = {"识别二维码", "保存到手机", "发送给朋友"};
        ArrayAdapter arrayAdapter = new ArrayAdapter<String>(AboutUsActivity.this, android.R.layout.simple_list_item_1, items);
        final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
        alertDialog.show();
        Window window = alertDialog.getWindow();
        window.setContentView(R.layout.list);
        ListView listItem = window.findViewById(R.id.list_item);
        //此处设置位置窗体大小
        WindowManager m = getWindowManager();
        Display d = m.getDefaultDisplay();  //为获取屏幕宽、高
        WindowManager.LayoutParams p = window.getAttributes();  //获取对话框当前的参数值
        p.height = (int) (d.getHeight() * 0.3);   //高度设置为屏幕的0.3
        p.width = (int) (d.getWidth() * 0.4);    //宽度设置为屏幕的0.5
        window.setAttributes(p);     //设置生效
        listItem.setAdapter(arrayAdapter);
        listItem.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                switch (position) {
                    // 获取到图片地址后做相应的处理
                    case 0://识别二维码
                        try {
                            //利用Intent直接打开微信
                            Uri uri = Uri.parse(url);
                            Intent intent = getPackageManager().getLaunchIntentForPackage("com.tencent.mm");
                            intent.setData(uri);
                            startActivity(intent);
                        } catch (Exception e) {
                            //若无法正常跳转,在此进行错误处理
                            Toast.makeText(AboutUsActivity.this, "无法跳转到微信,请检查您是否安装了微信!", Toast.LENGTH_SHORT).show();
                        }
                        alertDialog.dismiss();
                        break;
                    case 1://保存到手机
                        if (mImageUrl==null){
                            mImageUrl = BitmapUtil.saveBitmap(AboutUsActivity.this, bitmap);
                            ToastUtils.show("保存成功");
                        }else {
                            ToastUtils.show("图片已在本地存在");
                        }
                        alertDialog.dismiss();
                        break;
                    case 2://发送给朋友
                        if (mImageUrl==null){
                            mImageUrl = BitmapUtil.saveBitmap(AboutUsActivity.this, bitmap);
                        }
                        sendToFriends(mImageUrl);
                        alertDialog.dismiss();
                        break;
                }
            }
        });
    }

    /**
     * 发送给好友
     * @param imageUrl
     */
    private void sendToFriends(String imageUrl) {
        Intent intent = new Intent(Intent.ACTION_SEND);
        Uri imageUri = Uri.parse(imageUrl);
        intent.setType("image/*");
        intent.putExtra(Intent.EXTRA_STREAM, imageUri);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(Intent.createChooser(intent, getTitle()));
    }
保存图片到本地相册
 private static final String SD_PATH = "/sdcard/dskqxt/pic/";
    private static final String IN_PATH = "/dskqxt/pic/";

    /**
     * 随机生产文件名
     *
     * @return
     */
    private static String generateFileName() {
        return UUID.randomUUID().toString();
    }
    /**
     * 保存bitmap到本地,并更新相册
     *
     * @param context
     * @param mBitmap
     * @return
     */
    public static String saveBitmap(Context context, Bitmap mBitmap) {
        String savePath;
        File filePic;
        String fileName;
        if (Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {
            savePath = SD_PATH;
        } else {
            savePath = context.getApplicationContext().getFilesDir()
                    .getAbsolutePath()
                    + IN_PATH;
        }
        fileName = savePath + generateFileName() + ".jpg";
        try {
            filePic = new File(fileName);
            if (!filePic.exists()) {
                filePic.getParentFile().mkdirs();
                filePic.createNewFile();
            }
            FileOutputStream fos = new FileOutputStream(filePic);
            mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.flush();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        //告诉系统,有一张图片,这样在分享到其他应用的时候,从系统中获取资源的时候获取图片了
        String url = "";
        try {
            url = MediaStore.Images.Media.insertImage(context.getContentResolver(), filePic.getAbsolutePath(), fileName + System.currentTimeMillis(), "gzh");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // 最后通知图库更新
        context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path)));
        return url;
    }



版权声明:本文为qq_35739488原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。