Dari semua yang saya lihat di Stack Exchange dan di tempat lain, saya sudah menyiapkan semuanya dengan benar untuk memulai IntentService saat booting OS Android. Sayangnya itu tidak dimulai saat boot, dan saya tidak mendapatkan kesalahan apa pun. Mungkin para ahli bisa membantu ...
Nyata:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.phx.batterylogger"
android:versionCode="1"
android:versionName="1.0"
android:installLocation="internalOnly">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BATTERY_STATS" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<service android:name=".BatteryLogger"/>
<receiver android:name=".StartupIntentReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
</manifest>
BroadcastReceiver untuk Startup:
package com.phx.batterylogger;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class StartupIntentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, BatteryLogger.class);
context.startService(serviceIntent);
}
}
UPDATE : Saya mencoba hampir semua saran di bawah ini, dan saya menambahkan logging seperti Log.v("BatteryLogger", "Got to onReceive, about to start service");
onReceive handler dari StartupIntentReceiver, dan tidak ada yang dicatat. Jadi itu bahkan tidak sampai ke BroadcastReceiver.
Saya pikir saya menerapkan APK dan menguji dengan benar, hanya menjalankan Debug di Eclipse dan konsol mengatakan itu berhasil menginstalnya ke tablet Xoom saya di \ BatteryLogger \ bin \ BatteryLogger.apk. Kemudian untuk mengujinya, saya mem-boot ulang tablet dan kemudian melihat log di DDMS dan memeriksa Layanan yang Berjalan di pengaturan OS. Apakah ini semua terdengar benar, atau saya melewatkan sesuatu? Sekali lagi, bantuan apa pun sangat dihargai.
Log.v("BatteryLogger", "Got to onReceive, about to start service");
ke penangan onReceive, dan itu tidak pernah muncul di log. Jadi pendengar gagal (?)Jawaban:
Nah berikut adalah contoh lengkap dari Aplikasi AutoStart
File AndroidManifest
autostart.java
service.java
hello.java - Ini akan muncul setiap kali Anda memulai perangkat setelah menjalankan Aplikasi satu kali.
sumber
Layanan Anda mungkin dimatikan sebelum selesai karena perangkat akan tidur setelah booting. Anda perlu mendapatkan penguncian layar saat aktif terlebih dahulu. Untungnya, pustaka Dukungan memberi kita kelas untuk melakukan ini:
kemudian, di Layanan Anda, pastikan untuk melepaskan kunci layar aktif:
Jangan lupa untuk menambahkan izin WAKE_LOCK:
sumber
Mengikuti harus bekerja. Saya telah memverifikasi. Mungkin masalah Anda ada di tempat lain.
sumber
Log()
pernyataan saya di sana dan perangkat emulator tidak menunjukkan layanan saya berjalan di setelan OS. Berikut adalah kesalahan di DDMS:System.err - at com.phx.batterylogger$1.onReceive(BatteryLogger.java:43)
Apakah itu berarti masalahnya ada di baris 43 layanan BatteryLogger saya?Saya telah menemukan cara untuk membuat aplikasi Anda berjalan dengan baik saat perangkat di-boot ulang, ikuti langkah-langkah di bawah ini agar berhasil.
File AndroidManifest
UIBootReceiver
Ini meminta izin untuk tidak perlu mengelola penghematan baterai untuk aplikasi ini sehingga Anda dapat berjalan di latar belakang dengan stabil.
Deklarasikan kode ini di onCreate () dari kelas MainActivity:
sumber
Terlihat sangat mirip dengan milik saya tetapi saya menggunakan nama paket lengkap untuk penerima:
Saya sudah:
sumber
Saya sudah sukses tanpa paket lengkap, apakah Anda tahu di mana rantai panggilan terputus? Jika Anda men-debug dengan
Log()
's, pada titik mana ia tidak lagi berfungsi?Saya pikir itu mungkin ada di IntentService Anda, ini semua terlihat baik-baik saja.
sumber
Log.v("BatteryLogger", "Got to onReceive, about to start service");
ke penangan onReceive, dan itu tidak pernah muncul di log. Jadi pendengar gagal (?)Hanya untuk mempermudah pencarian, seperti yang disebutkan dalam komentar,
ini tidak dimungkinkan sejak 3.1https://stackoverflow.com/a/19856367/6505257sumber