android判斷是否安裝支付寶
『壹』 Android開發中App支付寶三方登錄
在支付寶授權登錄之前,有的需要先判斷一下手機上是否安裝支付寶應用,
在APP申請審核之後會自拆畝並動生成app_id,pid,
RSA_PRIVATE 為公鑰,RSA2_PRIVATE為私鑰
支付寶登錄授權官旅跡方文檔耐歷地址:
https://opendocs.alipay.com/open/218/105325
『貳』 Android 讀取已安裝應用列表需要申請許可權嗎
這里我先公布下答案:不需要
我要實現讀取已安裝應用列表功能,Google了一下,可以通過PackageManager.getInstalledPackages()方法獲取,我手頭有三台手機,分別是華為Nexus 5X、Meta9、Vivo X20,寫了個Demo在這三個手機上進行測試,測試結果如下:
我沒有申請任何許可權,Vivo X20為什麼會出現申請讀取已安裝應用列表許可權對話框呢?為什麼是有時候能獲取到全部已安裝應用列表,有時候獲取不到?
Google一下,看有沒有和我類似的問題,找到了一篇:
Android 如何完整的獲取到用戶已安裝應用列表
這篇文章中,作者有個結論:『國內部分廠商比如華為、oppo,他們將」獲取用戶已安裝應用列表」的許可權暴露給了用戶,讓用戶可以自由決定允許或者禁止應用訪問該信息。』
Nexus 5X中沒有找到讀取已安裝應用列表許可權。
這里有提到華為,我打開meta 9的許可權列表看了一下有讀取已安裝應用列表許可權,我的Demo對應的這個許可權默認是打開的,所以meta 9是能獲取到全部已安裝應用列表。
再看下Vivo X20,在打開Demo的時候彈出申請許可權對話框了,說明Vivo也屬於那部分國內廠商,由於在彈出申請讀取已安裝應用列表許可權對話框時,我允許了,所以打開Vivo X20的讀取已安裝應用列表許可權時,這里的狀態是打開的,但是,點進去一看,暗藏玄機,這里還有一個 安全等級,分為高、中、低 ,我的Demo屬於高,看看其他應用呢?微信安全等級屬於低、支付寶屬於低,讀取不到應用列表難道和這個 安全等級 有關系嗎?
我手動將我的Demo的 安全等級 調整為低,再打開Demo,奇跡發生了,沒有彈出申請讀取已安裝應用列表許可權對話框,並且獲取到了全部已安裝應用列表。
Android 讀取已安裝應用列表不需要申請許可權,因為Android許可權列表中沒有許可權是用於讀取已安裝應用列表的。
如果想要獲取Vivo X20這種有 安全等級 的手機中的已安裝應用列表,由於這種 安全等級 我們無法決定,所以只能通過反向查找的方式,即通過包名能否找到應用,從而判斷是否安裝了某應用。
這種方法獲取不到全部已安裝應用列表,只能獲取到指定的應用。
如果有比較了解許可權的同學覺得我有寫的不對的地方,或者對於獲取已安裝應用列表有更好的方法,歡迎留言交流!
『叄』 Android 是怎麼判斷某個APK文件是否已經安裝
Android系統中,判斷應用有無安裝有兩種方式:
1.根據包名判斷,以下為判斷代碼:
public boolean checkApkExist(Context context, String packageName) {
if (packageName == null || 「」.equals(packageName))
return false;
try {
ApplicationInfo info = context.getPackageManager()
.getApplicationInfo(packageName,
PackageManager.GET_UNINSTALLED_PACKAGES);
return true;
} catch (NameNotFoundException e) {
return false;
}
}
2. 根據Intent判斷,以下為判斷代碼:
public boolean checkApkExist(Context context, Intent intent) {
List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(intent, 0);
if(list.size() > 0){
return true;
}
return false;
}
public boolean checkApkExist(Context context, String packageName) {
if (packageName == null || 「」.equals(packageName)) return false;
try {
ApplicationInfo info = context.getPackageManager() .getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES); return true;
} catch (NameNotFoundException e) { return false; }
}
public boolean checkApkExist(Context context, Intent intent) {
List<ResolveInfo> list = context.getPackageManager()
.queryIntentActivities(intent, 0);
if (list.size() > 0) {
return true;
}
return false;
}
『肆』 Android開發:檢測手機上是否安裝該App
判斷手機已安裝某程序的方法:
『伍』 android ping++ 怎麼調用支付寶
在技術集成之前,商戶需要進行注冊,並簽約安全支付服務。簽約成功後可獲取支付寶分配的合作商戶ID(PartnerID),賬戶ID(SellerID),調用介面時使用。
支付細節的實現,主要通過支付寶提供的一個支付安全服務安裝包alipay_plugin_20120428msp.apk,首次使用,首先檢查是否安裝此插件,沒有會提示安裝。具體的支付細節,在這個插件內完成。大部分的支付平台也都是採用的這種方式。
調用支付寶的介面進行支付,主要有以下幾個步驟
1. 將商戶ID,收款帳號,外部訂單號,商品名稱,商品介紹,價格,通知地址封裝成訂單信息
2. 對訂單信息進行簽名
3. 將訂單信息,簽名,簽名方式封裝成請求參數
4. 調用pay方法。
主要流程圖如下:
支付介面pay方法的調用如下:
。。。
// start pay for this order.
// 根據訂單信息開始進行支付
try {
// prepare the order info.
// 准備訂單信息
String orderInfo = getOrderInfo(position);
// 這里根據簽名方式對訂單信息進行簽名
String signType = getSignType();
String strsign = sign(signType, orderInfo);
Log.v("sign:", strsign);
// 對簽名進行編碼
strsign = URLEncoder.encode(strsign);
// 組裝好參數
String info = orderInfo + "&sign=" + "\"" + strsign + "\"" + "&"
+ getSignType();
Log.v("orderInfo:", info);
// start the pay.
// 調用pay方法進行支付
MobileSecurePayer msp = new MobileSecurePayer();
boolean bRet = msp.pay(info, mHandler, AlixId.RQF_PAY,this);if (bRet) {
// show the progress bar to indicate that we have started
// paying.
// 顯示「正在支付」進度條
closeProgress();
mProgress = BaseHelper.showProgress(this,null, "正在支付",false,
true);
} else
;
} catch (Exception ex) {
Toast.makeText(AlixDemo.this, R.string.remote_call_failed,
Toast.LENGTH_SHORT).show();
}
。。。
/**
* 向支付寶發送支付請求
*
* @param strOrderInfo
* 訂單信息
* @param callback
* 回調handler
* @param myWhat
* 回調信息
* @param activity
* 目標activity
* @return
*/
public boolean pay(final String strOrderInfo,final Handler callback,
final int myWhat, final Activity activity) {
if (mbPaying)
return false;
mbPaying = true;//
mActivity = activity;// bind the service.
// 綁定服務
if (mAlixPay ==null) {
// 綁定安全支付服務需要獲取上下文環境,
// 如果綁定不成功使用mActivity.getApplicationContext().bindService
// 解綁時同理
mActivity.getApplicationContext().bindService(
new Intent(IAlixPay.class.getName()),mAlixPayConnection,
Context.BIND_AUTO_CREATE);
}
// else ok.// 實例一個線程來進行支付
new Thread(new Runnable() {
public void run() {
try {
// wait for the service bind operation to completely
// finished.
// Note: this is important,otherwise the next mAlixPay.Pay()
// will fail.
// 等待安全支付服務綁定操作結束
// 注意:這里很重要,否則mAlixPay.Pay()方法會失敗
synchronized (lock) {
if (mAlixPay ==null)
lock.wait();
}// register a Callback for the service.
// 為安全支付服務注冊一個回調
mAlixPay.registerCallback(mCallback);// call the MobileSecurePay service.
// 調用安全支付服務的pay方法
String strRet =mAlixPay.Pay(strOrderInfo);
BaseHelper.log(TAG,"After Pay: " + strRet);// set the flag to indicate that we have finished.
// unregister the Callback, and unbind the service.
// 將mbPaying置為false,表示支付結束
// 移除回調的注冊,解綁安全支付服務
mbPaying = false;
mAlixPay.unregisterCallback(mCallback);
mActivity.getApplicationContext().unbindService(
mAlixPayConnection);// send the result back to caller.
// 發送交易結果
Message msg = new Message();
msg.what = myWhat;
msg.obj = strRet;
callback.sendMessage(msg);
} catch (Exception e) {
e.printStackTrace();// send the result back to caller.
// 發送交易結果
Message msg = new Message();
msg.what = myWhat;
msg.obj = e.toString();
callback.sendMessage(msg);
}
}
}).start();return true;
}調用了支付服務之後,有兩種方式返回交易結果:
1. 支付結果作為介面返回的字元串返回。返回的參數包含在result字元串中,具體再進行解析。
2. 支付寶伺服器通知。商戶需要提供一個http協議的介面,包含在參數里傳遞給安全支付,即notify_url。支付寶伺服器在支付完成後,會用POST方法調用notufy_url,以xml為數據格式傳輸支付結果。需要注意的是,商戶伺服器收到支付寶發的通知之後,需要返回一個純字元串「success」,不然支付寶的伺服器會持續調用七次回調url提供的介面。
『陸』 Android判斷是否安裝某App
開發過程中會遇到跳轉其他App的情況,諸如支付寶支付跳轉、更新跳轉等。跳轉之前需要判斷手機是否安裝該App,以下以應用寶為例。