薄暮微凉_ 2024-01-04 11:04 采纳率: 0%
浏览 142

Android app 主动提示想要打开其他应用

问题遇到的现象和发生背景

公司的android app在使用过程中有用户反馈会弹窗提示想要打开“小红书”、“知乎”、“孩子王”等其他应用,但是在自己app内并没有添加跳转到其他应用的功能。

操作环境、软件版本等信息

img


img

尝试过的解决方法

在出现问题的手机上关闭自己app的获取已安装应用列表权限貌似可以解决

我想要达到的结果

能否在代码层面解决此问题

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-04 12:04
    关注

    【相关推荐】



    • 你可以看下这个问题的回答https://ask.csdn.net/questions/354105
    • 这篇博客也不错, 你可以看下Android App 隐藏标题栏+状态栏+导航栏+获取状态栏的三种方法
    • 除此之外, 这篇博客: android中关于微信支付流程的总结中的 三、项目集成【APP端请求统一下单接口、进行签名,这是微信支付之前的做法,目前已经不支持,写在这里只是为了纪念一下那段苦逼的日子】 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
      • 在调用微信支付的Activity的onCreate方法中实例化支付请求对象:

        req = new PayReq();
      • 与微信建立通信联系:在代码中向微信APP注册你的APPId,可以在程序入口Activity的onCreate方法中,也可以在其他合适的地方进行注册。笔者比较喜欢在调用微信支付的时候才进行注册。

        final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);
        msgApi.registerApp(Constants.APP_ID);
      • 调用统一下单接口,生成预支付订单号prepay_id:
        (1). URL地址:

      https://api.mch.weixin.qq.com/pay/unifiedorder
      (2).开启任务:
      GetPrepayIdTask getPrepayId = new GetPrepayIdTask();
      getPrepayId.execute();

      (3).在任务中调用统一下单接口,获取prepay_id。

      private class GetPrepayIdTask extends
                  AsyncTask<Void, Void, Map<String, String>> {
      
              private ProgressDialog dialog;
      
              @Override
              protected void onPreExecute() {
      
                  dialog = ProgressDialog.show(context, getString(R.string.app_tip),
                          getString(R.string.getting_prepayid));
              }
      
              @Override
              protected void onPostExecute(Map<String, String> result) {
                  if (dialog != null) {
                      dialog.dismiss();
                  }
                  resultunifiedorder = result;
                  System.out.println("result=" + result);
                  // 生成签名参数
                  genPayReq();
                  // 调起支付接口
                  sendPayReq();
              }
      
              @Override
              protected void onCancelled() {
                  super.onCancelled();
              }
      
              @Override
              protected Map<String, String> doInBackground(Void... params) {
      
                  // 统一下单接口
                  String url = String
                  //genProductArgs方法用来生成订单详细信息,在官方demo中有详细代码。
                  String entity = genProductArgs();
                  System.out.println("entity=" + entity);
                  byte[] buf = Util.httpPost(url, entity);
                  String content = new String(buf);
                  System.out.println("content=" + content);
                  Map<String, String> xml;
                  try {
                      xml = decodeXml(new String(content.getBytes("iso8859-1"),
                              "utf-8"));
                      return xml;
                  } catch (UnsupportedEncodingException e) {
                      e.printStackTrace();
                  }
                  return null;
              }
          }

      订单详细信息中需要注意的几个参数:

      • notify_url:微信和我们后台建立链接的HTTP协议地址,在支付完成后,微信会通过这个地址向我们的后台服务器发送支付结果。
      • out_trade_no:这个参数是我们服务器生成的订单编号。
      • spbill_create_ip:终端IP,我们服务器定好的。
      • total_fee:订单金额,单位为分。
      • 返回订单详情时一定要注意中文编码问题:String(xmlstring.toString().getBytes(), “ISO8859-1”)。
    • 任务执行完成后,将参数重新签名。

      //在任务执行完成后调用这个方法。
      private void genPayReq() {
                  req.appId = Constants.APP_ID;
                  req.partnerId = Constants.MCH_ID;
                  req.prepayId = resultunifiedorder.get("prepay_id");
                  //参数值是固定的
                  req.packageValue = "Sign=WXPay";
                  req.nonceStr = genNonceStr();
                  req.timeStamp = String.valueOf(genTimeStamp());
                  List<NameValuePair> signParams = new LinkedList<NameValuePair>();
                  signParams.add(new BasicNameValuePair("appid", req.appId));
                  signParams.add(new BasicNameValuePair("noncestr", req.nonceStr));
                  signParams.add(new BasicNameValuePair("package", req.packageValue));
                  signParams.add(new BasicNameValuePair("partnerid", req.partnerId));
                  signParams.add(new BasicNameValuePair("prepayid", req.prepayId));
                  signParams.add(new BasicNameValuePair("timestamp", req.timeStamp));
                  //再次签名
                  req.sign = genAppSign(signParams);
              }
    • 发起支付。

       msgApi.sendReq(req);
    • 回调支付结果
      在包名路径下创建新的文件夹wxapi,并在此文件夹下创建WXPayEntryActivity类,注意:文件夹名称和类名称必须按照这样命名,否则会导致无法回调。在类中实现onResp方法,支付完成后微信APP会返回到我们的APP上,并回调此方法。我们要做的就是在这个方法中接收通知,判断返回码,如果支付成功则将返回结果发送给后台服务器,查询支付结果再向用户展示实际支付结果。千万要记住:不能以APP返回的结果作为用户支付的结果,要以后台服务器接收的异步通知或从后台查询得知的结果位准。

      这里写图片描述


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 1月4日