The problem of significant energy consumption by the built-in Wi-Fi interface of mobile devices has been discussed for many years. We propose a cross-layer energy-saving scheme to maximize the sleep time and minimize the number of state transitions in the Wi-Fi interface of a mobile device. To achieve energy savings, we defer and join packet transmissions of mobile apps. However, some mobile apps may have delay constraint requirements for their packet transmissions. To avoid violating the delay constraint of an app, we also determine the final transmission interval of each delay-constrained packet. After joining the transmissions of some packets, the Wi-Fi interface can have a longer sleep duration to reduce energy consumption. To fully utilize the Wi-Fi bandwidth of the mobile device and satisfy the transmission requirements of different delay-constrained apps, the problem of selecting packets to join their transmissions is mapped to the well-known knapsack problem. We develop a greedy algorithm to efficiently solve the above mapping problem. Finally, simulation experiments are performed to demonstrate the effectiveness of the proposed scheme in energy savings and transmission delay.