问题遇到的现象和发生背景
公司的android app在使用过程中有用户反馈会弹窗提示想要打开“小红书”、“知乎”、“孩子王”等其他应用,但是在自己app内并没有添加跳转到其他应用的功能。
操作环境、软件版本等信息


尝试过的解决方法
在出现问题的手机上关闭自己app的获取已安装应用列表权限貌似可以解决
我想要达到的结果
能否在代码层面解决此问题
公司的android app在使用过程中有用户反馈会弹窗提示想要打开“小红书”、“知乎”、“孩子王”等其他应用,但是在自己app内并没有添加跳转到其他应用的功能。


在出现问题的手机上关闭自己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地址:
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;
}
}
订单详细信息中需要注意的几个参数:
任务执行完成后,将参数重新签名。
//在任务执行完成后调用这个方法。
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返回的结果作为用户支付的结果,要以后台服务器接收的异步通知或从后台查询得知的结果位准。