ฟีเจอร์ Quick Access Wallet มีให้บริการจาก Android 11 ช่วยให้ผู้ใช้ เข้าถึงบัตรสำหรับชำระเงินและบัตรผ่านที่เกี่ยวข้องได้โดยตรงจากเมนูเปิด/ปิด การใช้งานหลัก ประกอบด้วยการเลือกวิธีการชำระเงินที่เหมาะสมก่อนดำเนินการ ทำธุรกรรมที่เครื่องชำระเงิน NFC และเข้าถึงเที่ยวบินและบัตรอื่นๆ ได้อย่างรวดเร็ว สำหรับกิจกรรมที่กำลังจะเกิดขึ้น
ใน Android 12 ขึ้นไป Wallet การเข้าถึงด่วน พร้อมใช้งานจากเฉดสีดังที่แสดงในรูปที่ 1 และรูปที่ 2
![]() |
![]() |
ใน Android 11 ฟีเจอร์นี้ใช้ได้จากเมนูเปิด/ปิดดังที่แสดงใน รูปที่ 3
![ฟีเจอร์ Wallet สำหรับการเข้าถึงด่วนในเมนูเปิด/ปิด](https://source.android.com/static/docs/core/connect/images/quick-access-wallet.png?authuser=0&hl=th)
ข้อกำหนด
อุปกรณ์ของคุณต้องมี NFC เพื่อใช้ฟีเจอร์ Wallet สำหรับการเข้าถึงด่วน ฟีเจอร์
เชื่อมโยงกับ QuickAccessWalletService
ของแอปการชำระเงิน NFC เริ่มต้น ซึ่งหมายความว่า
อุปกรณ์ต้องรองรับ NFC ด้วย
การจำลองการ์ดแบบโฮสต์ (HCE)
ภาพรวมของฟีเจอร์
Wallet การเข้าถึงด่วนจะแบ่งออกเป็น 2 ส่วน ได้แก่ UI สำหรับการเข้าถึงด่วน Wallet และ ผู้ให้บริการบัตร Wallet แบบเข้าถึงด่วน
ใน Android 12 ขึ้นไป UI ของ Wallet จะทำงานในระบบ
UI และอยู่ใน
frameworks/base/packages/SystemUI/src/com/android/systemui/wallet
ใน
Android 11, UI ของ Wallet ซึ่งอยู่ที่
platform/packages/apps/QuickAccessWallet
ต้องติดตั้งและอยู่ในรายการที่อนุญาตพิเศษ
ผู้ให้บริการบัตร Wallet แบบ Quick Access เป็นแอปชำระเงิน NFC เริ่มต้น ผู้ใช้สามารถ
ติดตั้งแอปการชำระเงิน NFC หลายรายการพร้อมกัน แต่ติดตั้งเฉพาะค่าเริ่มต้น
แอปการชำระเงิน NFC จะแสดงบัตรในเมนูเปิด/ปิด คุณสามารถระบุ NFC ได้
มีการตั้งค่าแอปการชำระเงินเป็นค่าเริ่มต้นในตอนแรก แต่ผู้ใช้สามารถเลือก
ในการตั้งค่า หากติดตั้งแอปการชำระเงิน NFC ไว้เพียงแอปเดียว แอปนั้นจะกลายเป็น
ใช้ค่าเริ่มต้นโดยอัตโนมัติ (โปรดดู
CardEmulationManager
)
การใช้งาน
หากต้องการระบุบัตรใน UI ของ Wallet การเข้าถึงด่วน การชำระเงินด้วย NFC
แอปพลิเคชันต้องใช้
QuickAccessWalletService
แอปการชำระเงินต้องมีรายการไฟล์ Manifest ที่โฆษณาบริการ
เพื่อให้มั่นใจว่ามีเพียง UI ของระบบเท่านั้นที่สามารถเชื่อมโยงกับ QuickAccessWalletService
ได้
แอปการชำระเงิน NFC ต้องใช้
สิทธิ์android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE
กำหนดให้ดำเนินการ
สิทธิ์ดังกล่าวช่วยให้มั่นใจได้ว่า
มีเพียง UI ของระบบเท่านั้นที่สามารถเชื่อมโยงกับ QuickAccessWalletService
<service
android:name=".MyQuickAccessWalletService"
android:label="@string/my_default_tile_label"
android:icon="@drawable/my_default_icon_label"
android:logo="@drawable/my_wallet_logo"
android:permission="android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE">
<intent-filter>
<action android:name="android.service.quickaccesswallet.QuickAccessWalletService" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data android:name="android.quickaccesswallet"
android:resource="@xml/quickaccesswallet_configuration" />
<meta-data
android:name="android.quickaccesswallet.tile"
android:resource="@drawable/my_default_tile_icon"/>
</service>
ข้อมูลเพิ่มเติมเกี่ยวกับ Wallet จะรวมอยู่ในไฟล์ XML ที่ลิงก์ ดังนี้
<quickaccesswallet-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:settingsActivity="com.example.android.SettingsActivity"
android:shortcutLongLabel="@string/my_wallet_empty_state_text"
android:shortcutShortLabel="@string/my_wallet_button_text"
android:targetActivity="com.example.android.WalletActivity"/>
ถัดไป แอปการชำระเงินต้องใช้ QuickAccessWalletService
ดังนี้
public class MyQuickAccessWalletService extends QuickAccessWalletService {
@Override
public void onWalletCardsRequested(
GetWalletCardsRequest request,
GetWalletCardsCallback callback) {
GetWalletCardsResponse response = // generate response
callback.onSuccess(response);
}
@Override
public void onWalletCardSelected(SelectWalletCardRequest request) {
// selecting a card should ensure that it is used when making an NFC payment
}
@Override
public void onWalletDismissed() {
// May un-select card if the wallet app has the concept of a 'default'
// payment method
}
}
หาก HostApduService
เริ่มจัดการธุรกรรม NFC ซึ่งด้วยเหตุนี้
เริ่มกิจกรรมเพื่อแสดงความคืบหน้าและผลลัพธ์ของการชำระเงิน
พยายามขอการอ้างอิงไปยัง QuickAccessWalletService
ที่เชื่อมโยงและการเรียก
QuickAccessWalletService#sendEvent
ที่มีประเภทเหตุการณ์เป็น
TYPE_NFC_PAYMENT_STARTED
ซึ่งจะทําให้ UI ของ Wallet ของการเข้าถึงด่วน
ปิด ซึ่งทำให้ผู้ใช้มองเห็นกิจกรรมการชำระเงินได้อย่างชัดเจน
ดูเอกสารเพิ่มเติมเกี่ยวกับการใช้ QuickAccessWalletService
ได้ที่
QuickAccessWalletService
และ
TestQuickAccessWalletService
การทดสอบ CTS
เปิดใช้ UI กระเป๋าเงินการเข้าถึงด่วนใน Android 11
หากต้องการกำหนดค่า Wallet สำหรับการเข้าถึงด่วนให้พร้อมใช้งานจากเมนูเปิด/ปิด
ใน Android 11 ให้ใส่
QuickAccessWallet
เป้าหมายในบิลด์และเปิดใช้ปลั๊กอิน globalactions.wallet
โดยการเพิ่ม
ในบรรทัดตัวหนาในตัวอย่างโค้ดด้านล่างไปยัง
overlay/frameworks/base/packages/SystemUI/res/values/config.xml
ไฟล์
<resources> ... <!-- SystemUI Plugins that can be loaded on user builds. --> <string-array name="config_pluginWhitelist" translatable="false"> <item>com.android.systemui</item> <item>com.android.systemui.plugin.globalactions.wallet</item> </string-array> </resources>
ระบุแอปการชำระเงิน NFC เริ่มต้นใน
ไฟล์การกำหนดค่าการตั้งค่า
โดยใช้ def_nfc_payment_component
แอปการชำระเงิน NFC เริ่มต้นต้องแสดง
QuickAccessWalletService
เพื่อส่งบัตรไปยัง Wallet สำหรับการเข้าถึงด่วน หากแอปการชำระเงิน NFC เริ่มต้น
ไม่ส่งออกบริการนี้ ระบบจะซ่อน UI ของ Wallet
รายละเอียดการใช้งาน QuickAccessWalletService
QuickAccessWalletService
มีวิธีการเชิงนามธรรม 3 วิธีที่ต้องติดตั้งใช้งาน ได้แก่
onWalletCardsRequested
, onWalletCardSelected
และ onWalletDismissed
แผนภาพลำดับด้านล่างแสดงลำดับการโทรเมื่อกระเป๋าเงินการเข้าถึงด่วน
แสดงทันทีก่อนการชำระเงิน NFC
![ตัวอย่างลำดับการโทรเมื่อมีการดู Wallet สำหรับการเข้าถึงด่วน](https://source.android.com/static/docs/core/connect/images/wallet-sequence-diagram.png?authuser=0&hl=th)
บางมุมมองของ Quick Access Wallet อาจไม่ได้มีการชำระเงินด้วย NFC แต่ก็
รูปที่ 4 ด้านบนแสดงความสามารถทั้งหมดของ
QuickAccessWalletService
ในตัวอย่างนี้ บัตร Quick Access Wallet
นำองค์ประกอบที่กำหนดเป็นสีน้ำเงินไปใช้ มีสมมติฐานว่าการชำระเงิน
บัตรจะถูกเก็บไว้บนอุปกรณ์ในฐานข้อมูล และ
อินเทอร์เฟซชื่อ PaymentCardManager
มีสันนิษฐานว่ากิจกรรม
ที่ชื่อ PaymentActivity
จะแสดงผลการชำระเงินด้วย NFC โฟลว์
จะดำเนินการดังนี้
- ผู้ใช้ทำท่าทางสัมผัสเพื่อเปิด Wallet สำหรับการเข้าถึงด่วน
UI กระเป๋าเงินการเข้าถึงด่วน (ส่วนหนึ่งของ UI ระบบ) จะตรวจสอบแพ็กเกจ เพื่อดูว่าแอปการชำระเงิน NFC เริ่มต้นมีการส่งออกไหม
QuickAccessWalletService
- หากไม่ได้ส่งออกบริการ ระบบจะไม่กระเป๋าเงินการเข้าถึงด่วน แสดงอยู่
UI ของ Wallet สำหรับการเข้าถึงด่วนจะเชื่อมโยงกับ
QuickAccessWalletService
และ โทรหาonWalletCardsRequested
เมธอดนี้ใช้ออบเจ็กต์คำขอ มีข้อมูลเกี่ยวกับจำนวนและขนาดของการ์ดที่แสดงได้ และ Callback สามารถเรียก Callback จากชุดข้อความที่อยู่เบื้องหลังได้QuickAccessWalletService
จะคำนวณการ์ดที่ต้องการแสดง จากนั้นเรียกเมธอดonSuccess
ใน Callback ที่ระบุ ตอนนี้ จึงขอแนะนำให้บริการดำเนินการเหล่านี้กับเทรดในเบื้องหลังUI ของระบบจะแจ้งเตือนทันทีที่การ์ดปรากฏขึ้น
QuickAccessWalletService
ว่าได้เลือกบัตรใบแรกโดยการโทรonWalletCardSelected
- ระบบจะเรียกใช้
onWalletCardSelected
ทุกครั้งที่ผู้ใช้เลือก บัตรใหม่ - อาจมีการเรียก
onWalletCardSelected
แม้ว่าปัจจุบัน บัตรที่เลือกไม่ได้เปลี่ยนแปลง
- ระบบจะเรียกใช้
เมื่อผู้ใช้ปิด Wallet สำหรับการเข้าถึงด่วน UI ของระบบจะแจ้ง
QuickAccessWalletService
โดยโทรไปที่onWalletDismissed
ในตัวอย่างข้างต้น ผู้ใช้นำโทรศัพท์มาไว้ในระยะการชำระเงิน NFC
เครื่องชำระเงินขณะที่ระบบแสดงกระเป๋าสตางค์ องค์ประกอบหลักของการจัดการ NFC
การชำระเงินมีค่าเป็น HostApduService
ซึ่งต้องนำไปใช้เพื่อประมวลผล APDU
ที่ได้รับจากโปรแกรมอ่าน NFC (ดูข้อมูลเพิ่มเติมได้ที่
การจำลองการ์ดแบบโฮสต์)
โดยจะถือว่าแอปการชำระเงินเริ่มกิจกรรมเพื่อแสดงความคืบหน้าและ
ของการโต้ตอบกับเครื่องชำระเงิน NFC อย่างไรก็ตาม การเข้าถึงด่วน
ไอคอน Wallet แสดงอยู่ที่ด้านบนของหน้าต่างแอป ซึ่งหมายความว่า
กิจกรรมการชำระเงินถูกบดบังโดย UI กระเป๋าเงินการเข้าถึงด่วน เพื่อแก้ไขปัญหานี้
แอปต้องแจ้ง UI ของระบบว่า UI กระเป๋าเงินการเข้าถึงด่วนควร
ปิดแล้ว ซึ่งทำได้โดยการอ้างอิงถึงขอบเขต
QuickAccessWalletService
และโทรหา sendWalletServiceEvent
พร้อมเหตุการณ์
ประเภท TYPE_NFC_PAYMENT_STARTED
การใช้งานตัวอย่าง QuickAccessWalletService
/** Sample implementation of {@link QuickAccessWalletService} */
@RequiresApi(VERSION_CODES.R)
public class MyQuickAccessWalletService extends QuickAccessWalletService {
private static final String TAG = "QAWalletSvc";
private ExecutorService executor;
private PaymentCardManager paymentCardManager;
@Override
public void onCreate() {
super.onCreate();
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
Log.w(TAG, "Should not run on pre-R devices");
stopSelf();
return;
}
executor = Executors.newSingleThreadExecutor();
paymentCardManager = new PaymentCardManager();
}
@Override
public void onDestroy() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
return;
}
executor.shutdownNow();
}
@Override
public void onWalletCardsRequested(
@NonNull GetWalletCardsRequest request, @NonNull GetWalletCardsCallback callback) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
return;
}
executor.submit(
() -> {
List<PaymentCard> paymentCards = paymentCardManager.getCards();
int maxCards = Math.min(paymentCards.size(), request.getMaxCards());
List<WalletCard> walletCards = new ArrayList<>(maxCards);
int selectedIndex = 0;
int cardWidthPx = request.getCardWidthPx();
int cardHeightPx = request.getCardHeightPx();
for (int index = 0; index < maxCards; index++) {
PaymentCard paymentCard = paymentCards.get(index);
WalletCard walletCard =
new WalletCard.Builder(
paymentCard.getCardId(),
paymentCard.getCardImage(cardWidthPx, cardHeightPx),
paymentCard.getContentDescription(),
paymentCard.getPendingIntent())
.build();
walletCards.add(walletCard);
if (paymentCard.isSelected()) {
selectedIndex = index;
}
}
GetWalletCardsResponse response =
new GetWalletCardsResponse(walletCards, selectedIndex);
callback.onSuccess(response);
});
}
@Override
public void onWalletCardSelected(@NonNull SelectWalletCardRequest request) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
return;
}
executor.submit(
() -> paymentCardManager.selectCardById(request.getCardId()));
}
@Override
public void onWalletDismissed() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
return;
}
executor.submit(() -> {
paymentCardManager.removeCardOverrides();
});
}
}
ดูรายละเอียดเพิ่มเติมเกี่ยวกับ QuickAccessWalletService
ได้ที่
การอ้างอิง API QuickAccessWalletService
สิทธิ์
รายการไฟล์ Manifest สำหรับ QuickAccessWalletService
ต้องมีแอตทริบิวต์
มีการใช้สิทธิ์ android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE
ใน
Android 11 นี่คือสิทธิ์ระดับลายเซ็นที่ระงับไว้
UI ระบบ ซึ่งหมายความว่า
เฉพาะกระบวนการ UI ของระบบเท่านั้นที่สามารถเชื่อมโยงกับการใช้งาน
QuickAccessWalletService
โปรดทราบว่าแอปที่โหลดจากแหล่งที่ไม่รู้จักสามารถอ้างสิทธิ์ได้
ได้รับสิทธิ์และเข้าถึงข้อมูล QuickAccessWalletService
ในอุปกรณ์ได้อย่างเต็มรูปแบบ
ที่ใช้ Android 10 หรือต่ำกว่า เพื่อป้องกันปัญหานี้ ขอแนะนำให้ใช้บริการ
ตรวจสอบเวอร์ชันของบิลด์ใน onCreate
และเปิดใช้บริการนี้ในอุปกรณ์เท่านั้น
ที่ใช้ Android 11 ขึ้นไป ไม่มีสิทธิ์อื่นๆ ของแอป
จำเป็นสำหรับบริการชำระเงินจำลองบัตรโฮสต์
บริการต่างๆ
หากแอปการชำระเงิน NFC เริ่มต้นไม่มีการใช้งานหรือส่งออกไม่ได้
QuickAccessWalletService
ระบบจะไม่แสดง UI ของ Wallet สำหรับการเข้าถึงด่วน
การตั้งค่าใน Android 12
หากต้องการเปิดหรือปิดใช้ Wallet สำหรับการเข้าถึงด่วนจากหน้าจอล็อก ผู้ใช้สามารถดำเนินการต่อไปนี้ได้ ใช้ปุ่มสลับแสดง Wallet ในการตั้งค่า > ดิสเพลย์ > หน้าจอล็อก หากต้องการปิดใช้ Wallet ในหน้าต่าง ผู้ใช้ต้องแก้ไขด้วยตนเอง ในหน้าต่างการตั้งค่าด่วน
รูปที่ 5 แสดงปุ่มสลับ Wallet ในหน้าหน้าจอล็อกในการตั้งค่า
การตั้งค่าใน Android 11
ผู้ใช้จะปิดฟีเจอร์ Wallet สำหรับการเข้าถึงด่วนได้จากแอปการตั้งค่า ในหน้าเว็บการตั้งค่า การตั้งค่า > ระบบ > ท่าทางสัมผัส > การ์ดและ บัตร
![หน้าการตั้งค่าเพื่อเปิดหรือปิดใช้ฟีเจอร์ Wallet สำหรับการเข้าถึงด่วน](https://source.android.com/static/docs/core/connect/images/cards-passes.png?authuser=0&hl=th)
การปรับแต่ง
เพิ่มมุมมอง Wallet สำหรับการเข้าถึงด่วนไปยังตำแหน่งอื่นใน UI ของระบบ
UI ของ Wallet สำหรับการเข้าถึงด่วน
สร้างขึ้นเป็น
ปลั๊กอินระบบ
แม้ว่าการติดตั้งใช้งาน AOSP จะใช้
GlobalActionsDialog
(แสดงเมื่อกดปุ่มเปิด/ปิดค้างไว้) คุณสามารถย้ายฟีเจอร์ไปไว้หลังท่าทางสัมผัสอื่นๆ ได้
ตราบใดที่คุณยังคงสัญญาที่ระบุโดยอินเทอร์เฟซของปลั๊กอิน
public interface GlobalActionsPanelPlugin extends Plugin {
/** Invoked when the view is shown */
PanelViewController onPanelShown(Callbacks callbacks, boolean deviceLocked);
/** Callbacks for interacting with the view container */
interface Callbacks {
/** Dismisses the view */
void dismissGlobalActionsMenu();
/** Starts a PendingIntent, dismissing the keyguard if necessary. */
void startPendingIntentDismissingKeyguard(PendingIntent pendingIntent);
}
/** Provides the Quick Access Wallet view */
interface PanelViewController {
/** Returns the QuickAccessWallet view, which may take any size */
View getPanelContent();
/** Invoked when the view is dismissed */
void onDismissed();
/** Invoked when the device is either locked or unlocked. */
void onDeviceLockStateChanged(boolean locked);
}
}
UI ของ Wallet สำหรับการเข้าถึงด่วน
ติดตั้งใช้งาน GlobalActionsPanelPlugin
และ PanelViewController
GlobalActionsDialog
รับอินสแตนซ์ของปลั๊กอิน Wallet โดยใช้
com.android.systemui.Dependency
:
GlobalActionsPanelPlugin mPanelPlugin =
Dependency.get(ExtensionController.class)
.newExtension(GlobalActionsPanelPlugin.class)
.withPlugin(GlobalActionsPanelPlugin.class)
.build()
.get();
หลังจากตรวจสอบว่าปลั๊กอินไม่เป็นค่าว่างและ PanelViewController
onPanelShown
แสดงผลเป็นค่าว่าง กล่องโต้ตอบจะแนบ View
ที่ระบุ
โดย getPanelContent
ไปยัง View
ของตนเอง และให้ Callback ที่เหมาะสมสำหรับ
เหตุการณ์ของระบบ
// Construct a Wallet PanelViewController.
// `this` implements GlobalActionsPanelPlugin.Callbacks
GlobalActionsPanelPlugin.PanelViewController mPanelController =
mPanelPlugin.onPanelShown(this, !mKeyguardStateController.isUnlocked());
// Attach the view
FrameLayout panelContainer = findViewById(R.id.my_panel_container);
FrameLayout.LayoutParams panelParams =
new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT);
panelContainer.addView(mPanelController.getPanelContent(), panelParams);
// Respond to unlock events (if the view can be accessed while the phone is locked)
keyguardStateController.addCallback(new KeyguardStateController.Callback() {
@Override
public void onUnlockedChanged() {
boolean unlocked = keyguardStateController.isUnlocked()
|| keyguardStateController.canDismissLockScreen();
mPanelController.onDeviceLockStateChanged(unlocked);
}
});
// Implement GlobalActionsPanelPlugin.Callbacks
@Override
public void dismissGlobalActionsMenu() {
dismissDialog();
}
@Override
public void startPendingIntentDismissingKeyguard(PendingIntent pendingIntent) {
mActivityStarter.startPendingIntentDismissingKeyguard(pendingIntent);
}
// Notify the wallet when the container view is dismissed
mPanelController.onDismissed();
หากต้องการนำ Wallet การเข้าถึงด่วนออกจากเมนูเปิด/ปิด อย่าใส่
เป้าหมาย QuickAccessWallet
จากบิลด์ของระบบ วิธีนำการเข้าถึงด่วนออก
Wallet จากเมนูเปิด/ปิด แต่เพิ่มลงในมุมมองอื่นจาก UI ของระบบ
รวมเป้าหมายของบิลด์และนำการอ้างอิง GlobalActionsPanelPlugin
ออก
จาก
GlobalActionsImpl
ตั้งการกำหนดค่าเริ่มต้น
Android 12
ใน Android 12 ขึ้นไป Wallet สำหรับการเข้าถึงด่วนคือ
ที่มองเห็นได้ในหน้าต่างการตั้งค่าด่วน ระดับการเข้าถึงการเข้าถึงด่วน
Wallet ในหน้าจอล็อกจะได้รับการปกป้องด้วยการตั้งค่าความปลอดภัยต่อไปนี้
LOCKSCREEN_SHOW_WALLET
การตั้งค่านี้ควบคุมว่า Wallet สำหรับการเข้าถึงด่วน
จะปรากฏที่ด้านล่างขวาของหน้าจอล็อก การตั้งค่านี้ตั้งไว้เป็น
true
โดยค่าเริ่มต้น แต่ผู้ใช้สามารถปิดได้ในการตั้งค่า >
ดิสเพลย์ > หน้าจอล็อก > แสดง Wallet
Android 11
ใน Android 11 ระดับการเข้าถึง Wallet แบบ Quick Access จะถูกจำกัดด้วยการตั้งค่าความปลอดภัย 2 แบบดังนี้
GLOBAL_ACTIONS_PANEL_ENABLED
และ GLOBAL_ACTIONS_PANEL_AVAILABLE
การตั้งค่าของ AVAILABLE
จะควบคุมการเปิดและปิดฟีเจอร์ใน
การตั้งค่า การตั้งค่านี้ตั้งไว้เป็นtrue
โดย
WalletPluginService
หาก QuickAccessWallet
ไม่ได้รวมอยู่ในบิลด์ การตั้งค่าจะยังคงอยู่
false
การตั้งค่า ENABLED
จะตั้งค่าเป็น true
โดยค่าเริ่มต้นในตำแหน่งเดียวกัน
แต่ผู้ใช้สามารถปิดได้ในการตั้งค่า หากต้องการเปลี่ยนลักษณะการทำงานเริ่มต้น
แก้ไข WalletPluginService#enableFeatureInSettings
การตรวจสอบความถูกต้อง
หากต้องการตรวจสอบการใช้งาน Quick Access Wallet ให้เรียกใช้ CTS และคู่มือ การทดสอบ การเปลี่ยนแปลงปลั๊กอินควรใช้ การทดสอบแบบ Robolectric
การทดสอบ CTS
ทำการทดสอบ CTS ที่
cts/tests/quickaccesswallet
การทดสอบด้วยตนเองสำหรับ Android 12
การทดสอบฟีเจอร์หลักของ Wallet การเข้าถึงด่วนกำหนดให้ต้องชำระเงินแบบ NFC
เครื่องชำระเงิน (จริงหรือปลอม) และแอปชำระเงิน NFC ที่ใช้
QuickAccessWalletService
(แอป Wallet) ฟีเจอร์หลักที่ต้องทดสอบ
ได้แก่ ความพร้อมจำหน่ายสินค้า สถานะศูนย์ การเลือกการ์ด และลักษณะการทำงานของหน้าจอล็อก
ความพร้อมใช้งาน
- หากแอปการชำระเงิน NFC เริ่มต้นไม่รองรับฟีเจอร์นี้ ไอคอน "Quick" เข้าถึง Wallet ไม่ได้ทั้งในการตั้งค่าด่วนและบนล็อก บนหน้าจอ
- หากแอปการชำระเงิน NFC เริ่มต้นรองรับฟีเจอร์นี้ การเข้าถึงด่วน Wallet สามารถเข้าถึงได้ในหน้าต่างการตั้งค่าด่วน
- หากแอปการชำระเงิน NFC เริ่มต้นรองรับฟีเจอร์นี้ และหาก
การตั้งค่า
LOCKSCREEN_SHOW_WALLET
คือtrue
ส่วน Wallet สำหรับการเข้าถึงด่วนคือ เข้าถึงได้บนหน้าจอล็อก - หากแอปการชำระเงิน NFC เริ่มต้นรองรับฟีเจอร์นี้ และหาก
การตั้งค่า
LOCKSCREEN_SHOW_WALLET
คือfalse
ไม่สามารถใช้ Wallet สำหรับการเข้าถึงด่วน เข้าถึงได้บนหน้าจอล็อก
สถานะศูนย์
หากเปิดใช้และส่งออก
QuickAccessWalletService
แต่ไม่ได้เปิดใช้ ให้การ์ด การ์ดเฉดสีจะปรากฏขึ้นตามที่แสดงใน ตัวอย่างในรูปที่ 7 การคลิกการ์ดจะเป็นการเปิดแอปการชำระเงิน NFC เริ่มต้นรูปที่ 7 ชิ้นส่วนตัวอย่างในหน้าต่างที่แสดงแอปการชำระเงิน NFC เริ่มต้น
การคลิกมุมมองสถานะว่างเปล่าดังที่แสดงในรูปที่ 8 จะเปิด แอปการชำระเงิน NFC เริ่มต้น มุมมองสถานะว่างเปล่านี้จะปรากฏต่อเมื่อ ผู้ใช้มีบัตรเหลืออยู่ใน Wallet 1 ใบ ให้นำบัตรออกจากรายละเอียดบัตร แล้วกลับไปที่มุมมอง Wallet
หน้าจอล็อกจะแสดงไอคอนกระเป๋าสตางค์
รูปที่ 8 มุมมองสถานะว่างเปล่าใน UI กระเป๋าเงินการเข้าถึงด่วน
สถานะที่ไม่เป็น 0
หากแอป Wallet มีบัตรอย่างน้อย 1 ใบ การ์ดจะอยู่ในเงา ปรากฏตามที่แสดงในรูปที่ 9
รูปที่ 9 การ์ดตัวอย่างในหน้าต่างเมื่อแอป Wallet มีบัตรอย่างน้อย 1 ใบ
การคลิกการ์ดจะแสดงภาพสไลด์การ์ด
หน้าจอล็อกจะแสดงปุ่มที่เปิด Wallet สำหรับการเข้าถึงด่วน
รูปที่ 10 UI กระเป๋าเงินออนไลน์สำหรับการเข้าถึงด่วนที่มีการ์ดแสดงอยู่
หากบัตรที่แสดงแทนวิธีการชำระเงิน NFC ให้ถือ โทรศัพท์ไปยังเครื่องชำระเงิน NFC จะส่งผลให้มีการใช้วิธีการชำระเงินนั้น และมุมมอง Wallet จะปิดไป
การคลิกการ์ดที่แสดงจะเปิดกิจกรรมโดยละเอียดของการ์ดนั้น
หาก
QuickAccessWalletService
มาจากบัตรหลายใบ ผู้ใช้ สามารถปัดดูการ์ดต่างๆ ได้เมนูรายการเพิ่มเติมมี 1 รายการ ได้แก่ เปิดการตั้งค่าหน้าจอล็อก ว่าผู้ใช้สามารถเปลี่ยนตัวเลือกแสดง Wallet ได้
การทดสอบสถานะล็อก
- หากโทรศัพท์ล็อกอยู่ คุณจะเห็นกระเป๋าเงินในการตั้งค่าด่วน เงาพร้อมคำอธิบายว่าเพิ่มบัตรหากไม่มีบัตรโดยค่าเริ่มต้น แอปการชำระเงิน หรือปลดล็อกเพื่อใช้ หากมีบัตรอยู่ในแอปการชำระเงินเริ่มต้น
- หากโทรศัพท์ล็อกอยู่ ระดับการเข้าถึง Wallet ในหน้าจอล็อกจะเกิดขึ้น
ควบคุมโดยการตั้งค่า
Secure.LOCKSCREEN_SHOW_WALLET
ซึ่ง ควบคุมได้ในการตั้งค่า - หากโทรศัพท์ล็อกอยู่
LOCKSCREEN_SHOW_WALLET
จะมีสถานะfalse
และไม่มีบัตร มีอยู่ในแอปการชำระเงิน NFC เริ่มต้น กระเป๋าเงินจะไม่แสดงใน ล็อกหน้าจอ - หากโทรศัพท์ล็อกอยู่
LOCKSCREEN_SHOW_WALLET
จะมีสถานะtrue
และไม่มีบัตร มีอยู่ในแอปการชำระเงิน NFC เริ่มต้น กระเป๋าเงินจะไม่แสดงใน ล็อกหน้าจอ - หากโทรศัพท์ล็อกอยู่
LOCKSCREEN_SHOW_WALLET
จะtrue
และการ์ด มีอยู่ในแอปการชำระเงิน NFC เริ่มต้น กระเป๋าเงินจะแสดงบนล็อก บนหน้าจอ - กำลังปลดล็อกโทรศัพท์ขณะที่กระเป๋าสตางค์แสดงบนล็อก ส่งผลให้มีการค้นหาการ์ดอีกครั้ง ซึ่งอาจส่งผลให้ เนื้อหาการ์ดที่แตกต่างกัน
การทดสอบการช่วยเหลือพิเศษ
- ผู้ใช้ TalkBack สามารถไปยังส่วนต่างๆ ในมุมมองของ Wallet ได้โดยการปัดไปทางซ้ายและขวา และโดยการฟังคำอธิบาย เนื้อหาของการ์ด
- การปัดไปทางซ้ายและขวาโดยเปิดใช้ TalkBack จะเป็นการเลือกการ์ดแต่ละใบตามลำดับ ผู้ใช้ TalkBack สามารถเลือกและใช้วิธีการชำระเงินด้วย NFC เพื่อชำระเงิน NFC เครื่องปลายทาง
การทดสอบด้วยตนเองสำหรับ Android 11
การทดสอบฟีเจอร์หลักของ Wallet การเข้าถึงด่วนกำหนดให้ต้องชำระเงินแบบ NFC
เครื่องชำระเงิน (จริงหรือปลอม) และแอปชำระเงิน NFC ที่ใช้
QuickAccessWalletService
(แอป Wallet) ฟีเจอร์หลักที่ต้องทดสอบ
ได้แก่ ความพร้อมใช้งาน สถานะเป็นศูนย์ การเลือกการ์ด และลักษณะการทำงานของหน้าจอล็อก
ความพร้อมใช้งาน
- หากการตั้งค่า
GLOBAL_ACTIONS_PANEL_ENABLED
เป็นtrue
และค่าเริ่มต้น แอปการชำระเงิน NFC รองรับฟีเจอร์นี้ ฟีเจอร์ Quick Access Wallet สามารถเข้าถึงได้ - หากการตั้งค่า
GLOBAL_ACTIONS_PANEL_ENABLED
เป็นfalse
และค่าเริ่มต้น แอปการชำระเงิน NFC รองรับฟีเจอร์นี้ แต่ Wallet การเข้าถึงด่วนไม่ได้ สามารถเข้าถึงได้ - หากการตั้งค่า
GLOBAL_ACTIONS_PANEL_ENABLED
เป็นtrue
และค่าเริ่มต้น แอปชำระเงิน NFC ไม่รองรับฟีเจอร์ Wallet การเข้าถึงด่วน ไม่สามารถเข้าถึงได้ - หากการตั้งค่า
GLOBAL_ACTIONS_PANEL_ENABLED
เป็นfalse
และค่าเริ่มต้น แอปชำระเงิน NFC ไม่รองรับฟีเจอร์ Wallet การเข้าถึงด่วน ไม่สามารถเข้าถึงได้
สถานะศูนย์
- หากเปิดใช้และส่งออก
QuickAccessWalletService
แต่ไม่ได้เปิดใช้ ให้บัตรต่างๆ แล้ว UI ของ Wallet สำหรับการเข้าถึงด่วนจะแสดงมุมมองสถานะว่างเปล่า การคลิกมุมมองสถานะว่างเปล่าจะเปิดแอป Wallet ขึ้นมา
วันที่ รูปที่ 11 มุมมองสถานะว่างเปล่าในการเข้าถึงด่วน UI ของ Wallet
สถานะที่ไม่เป็น 0
หากแอป Wallet มีบัตรอย่างน้อย 1 ใบ ระบบจะแสดงบัตร ใน UI ของ Wallet สำหรับการเข้าถึงด่วน
วันที่ รูปที่ 12 UI กระเป๋าเงินออนไลน์สำหรับการเข้าถึงด่วนที่มีการ์ด แสดงอยู่ หากบัตรที่แสดงแทนวิธีการชำระเงิน NFC ให้ถือ โทรศัพท์ไปยังเครื่องชำระเงิน NFC จะส่งผลให้มีการใช้วิธีการชำระเงินนั้น และมุมมอง Wallet จะปิดไป
การคลิกการ์ดที่แสดงอยู่จะปิดมุมมอง Wallet และเปิด กิจกรรมของบัตรนั้นอย่างละเอียด
หาก
QuickAccessWalletService
มาจากบัตรหลายใบ ผู้ใช้ สามารถปัดดูการ์ดต่างๆ ได้เมนูรายการเพิ่มเติมมี 2 รายการ รายการแรกที่เปิดแอป Wallet และอีกตัวเลือกหนึ่งที่เปิดการ์ดแสดงการ์ดและ บัตรในการตั้งค่า
การทดสอบสถานะล็อก
- หากโทรศัพท์ล็อกอยู่ ระดับการเข้าถึง Wallet จะควบคุมโดย
Settings.Secure.POWER_MENU_LOCK_SHOW_CONTENT
ได้ ควบคุมได้ในการตั้งค่า - หากโทรศัพท์ล็อกอยู่และ
POWER_MENU_LOCK_SHOW_CONTENT
มีสถานะfalse
Wallet จะไม่ปรากฏ - หากโทรศัพท์ล็อกอยู่และ
POWER_MENU_LOCK_SHOW_CONTENT
มีสถานะtrue
Wallet จะปรากฏขึ้น - กำลังปลดล็อกโทรศัพท์ขณะที่กระเป๋าสตางค์แสดงบนล็อก ส่งผลให้มีการค้นหาการ์ดอีกครั้ง ซึ่งอาจส่งผลให้ เนื้อหาการ์ดที่แตกต่างกัน
การทดสอบการช่วยเหลือพิเศษ
- ผู้ใช้ TalkBack สามารถไปยังส่วนต่างๆ ในมุมมองกระเป๋าเงินได้โดยการปัดไปทางซ้ายและขวา และโดยการฟังคำอธิบาย เนื้อหาของการ์ด
- การปัดไปทางซ้ายและขวาโดยเปิดใช้ TalkBack จะเป็นการเลือกการ์ดแต่ละใบตามลำดับ ผู้ใช้ TalkBack สามารถเลือกและใช้วิธีการชำระเงินด้วย NFC เพื่อชำระเงิน NFC เครื่องปลายทาง