Aygıt önyüklemesinde hizmet nasıl başlatılır (otomatik çalıştırma uygulaması vb.)
İlk olarak: Android 3.1+ sürümünden beri, kullanıcı uygulamanızı en az bir kez hiç başlatmamışsa veya kullanıcı "zorla kapalı" uygulamasını BOOT_COMPLETE almazsınız. Bu, kötü amaçlı yazılımların otomatik olarak kayıt hizmetini önlemek için yapıldı. Bu güvenlik açığı Android'in yeni sürümlerinde kapatıldı.
Çözüm:
Etkinlikle uygulama oluşturun. Kullanıcı bir kez çalıştırdığında uygulama BOOT_COMPLETE yayın mesajı alabilir.
İkinci olarak: Harici depolama birimi takılmadan önce BOOT_COMPLETE gönderilir. Uygulama harici depolama birimine kurulursa BOOT_COMPLETE yayın mesajı almaz.
Bu durumda iki çözüm vardır:
- Uygulamanızı dahili depolamaya yükleyin
- Dahili depolama alanına başka bir küçük uygulama yükleyin. Bu uygulama BOOT_COMPLETE alır ve harici depolama alanında ikinci uygulamayı çalıştırır.
Uygulamanız dahili depolama birimine zaten yüklenmişse, aşağıdaki kod cihaz önyüklemesinde hizmetin nasıl başlatılacağını anlamanıza yardımcı olabilir.
Manifest.xml içinde
İzin:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
BOOT_COMPLETED alıcınızı kaydedin:
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Hizmetinizi kaydedin:
<service android:name="org.yourapp.YourCoolService" />
Alıcı OnBoot.java'da:
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 için, cihaz RECEIVE_BOOT_COMPLETED yakalamıyorsa bu kodu Manifest'e de eklemeniz gerekebilir:
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
Alıcı şimdi şöyle görünür:
<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>
Yeniden başlatma emülatörü veya gerçek cihaz olmadan BOOT_COMPLETED nasıl test edilir? Bu kolay. Bunu dene:
adb -s device-or-emulator-id shell am broadcast -a android.intent.action.BOOT_COMPLETED
Cihaz kimliği nasıl alınır? Kimliğine sahip bağlı cihazların listesini alın:
adb devices
ADB'de adb varsayılan olarak şunları bulabilirsiniz:
adt-installation-dir/sdk/platform-tools
Zevk almak! )