วิธีเริ่มบริการเมื่อบู๊ตอุปกรณ์ (แอปทำงานอัตโนมัติ ฯลฯ )
สำหรับครั้งแรก: ตั้งแต่ Android เวอร์ชัน 3.1 ขึ้นไปคุณจะไม่ได้รับ BOOT_COMPLETE หากผู้ใช้ไม่เคยเริ่มแอพของคุณอย่างน้อยหนึ่งครั้งหรือผู้ใช้แอปพลิเคชัน "บังคับปิด" สิ่งนี้ทำเพื่อป้องกันมัลแวร์ลงทะเบียนบริการโดยอัตโนมัติ ช่องโหว่ความปลอดภัยนี้ปิดใน Android เวอร์ชันใหม่กว่า
สารละลาย:
สร้างแอปที่มีกิจกรรม เมื่อผู้ใช้เรียกใช้เมื่อแอปสามารถรับข้อความออกอากาศ BOOT_COMPLETE
สำหรับวินาที: ส่ง BOOT_COMPLETE ก่อนที่จะติดตั้งที่เก็บข้อมูลภายนอก หากติดตั้งแอปลงในที่จัดเก็บข้อมูลภายนอกแล้วจะไม่ได้รับข้อความออกอากาศ BOOT_COMPLETE
ในกรณีนี้มีสองวิธี:
- ติดตั้งแอปของคุณเพื่อจัดเก็บข้อมูลภายใน
- ติดตั้งแอพเล็ก ๆ อีกอันในที่เก็บข้อมูลภายใน แอปนี้ได้รับ BOOT_COMPLETE และเรียกใช้แอปที่สองในที่จัดเก็บข้อมูลภายนอก
หากแอปของคุณติดตั้งอยู่ในที่เก็บข้อมูลภายในแล้วรหัสด้านล่างจะช่วยให้คุณเข้าใจวิธีเริ่มบริการเมื่อบูตอุปกรณ์
ใน Manifest.xml
สิทธิ์:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
ลงทะเบียนผู้รับ BOOT_COMPLETED ของคุณ:
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
ลงทะเบียนบริการของคุณ:
<service android:name="org.yourapp.YourCoolService" />
ในตัวรับสัญญาณ OnBoot.java:
public class OnBoot extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Create Intent
Intent serviceIntent = new Intent(context, YourCoolService.class);
// Start service
context.startService(serviceIntent);
}
}
สำหรับ HTC คุณอาจต้องเพิ่ม Manifest ในรหัสนี้หากอุปกรณ์ไม่ได้รับ RECEIVE_BOOT_COMPLETED:
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
ผู้รับตอนนี้มีลักษณะเช่นนี้:
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
วิธีทดสอบ BOOT_COMPLETED โดยไม่ต้องรีสตาร์ทเครื่องจำลองหรืออุปกรณ์จริง มันเป็นเรื่องง่าย. ลองสิ่งนี้:
adb -s device-or-emulator-id shell am broadcast -a android.intent.action.BOOT_COMPLETED
จะรับรหัสอุปกรณ์ได้อย่างไร รับรายการอุปกรณ์ที่เชื่อมต่อด้วยรหัส:
adb devices
adb ใน ADT ตามค่าเริ่มต้นคุณสามารถค้นหาได้ใน:
adt-installation-dir/sdk/platform-tools
สนุก! )