Luncurkan aplikasi Android tanpa Aktivitas utama dan mulai Layanan saat meluncurkan aplikasi

91

Saya memiliki skenario berikut dalam aplikasi saya. Tidak ada UI di aplikasi saya; alih-alih ada Layanan yang mulai saat boot dan akan terus berjalan.

Bagaimana cara mengonfigurasi file manifes saya tanpa Aktivitas utama? Bisakah saya meluncurkan aplikasi saya tanpa Aktivitas apa pun? Dan saat meluncurkan aplikasi saya, Layanan saya harus dimulai. Apakah ini mungkin?

Saya tidak ingin membuat Aktivitas tembus cahaya untuk memulai Layanan.

Meher
sumber
lihatlah [pertanyaan] [1] [1] ini: stackoverflow.com/questions/4468006/…
Munish Kapoor

Jawaban:

125

Anda mengatakan Anda tidak ingin menggunakan Aktivitas tembus cahaya, tetapi sepertinya itu cara terbaik untuk melakukannya:

  1. Di Manifest Anda, setel tema Aktivitas ke Theme.Translucent.NoTitleBar.
  2. Jangan repot-repot dengan tata letak untuk Aktivitas Anda, dan jangan panggil setContentView().
  3. Di Aktivitas Anda onCreate(), mulai Layanan Anda dengan startService().
  4. Keluar dari Aktivitas finish()setelah Anda memulai Layanan.

Dengan kata lain, Aktivitas Anda tidak harus terlihat; itu hanya dapat memastikan Layanan Anda berjalan dan kemudian keluar, yang terdengar seperti yang Anda inginkan.

Saya sangat menyarankan untuk menampilkan setidaknya pemberitahuan Toast yang menunjukkan kepada pengguna bahwa Anda meluncurkan Layanan, atau bahwa Layanan sudah berjalan. Pengalaman pengguna yang sangat buruk memiliki ikon peluncur yang tampaknya tidak melakukan apa-apa saat Anda menekannya.

Darshan Rivka Whittle
sumber
2
itu memberi saya layar kosong setelah meluncurkan aplikasi saya. yang seharusnya tidak terjadi ...
Meher
1
@meher Saya baru saja mengujinya dan berfungsi dengan sempurna untuk saya - Layanan saya dimulai dan saya tidak melihat Aktivitas apa pun, bahkan untuk sekejap. Silakan posting konten aktivitas Anda di onCreate (), dan kami akan dapat mencari tahu apa yang salah.
Darshan Rivka Whittle
ketika saya menginstal aplikasi saya untuk pertama kalinya, saya dapat melihat aktivitas diluncurkan dan menghilang dalam sedetik.
Meher
public class TestActivity meluas Activity {/ ** Disebut saat aktivitas pertama kali dibuat. * / @Override public void onCreate (Bundle storedInstanceState) {super.onCreate (storedInstanceState); Log.i ("aktivitas", "layanan mulai"); startService (Intent baru (TestActivity.this, MyService.class)); selesai(); }}
Meher
1
Saya menyadari ini adalah pertanyaan lama, tetapi sepertinya tidak berfungsi lagi. Mengubah tema aktivitas utama menjadi Theme.Translucent.NoTitleBar atau Theme.Translucent.NoTitleBar.FullScreen menyebabkan aplikasi yang berfungsi secara singkat yang menampilkan layar aktivitas secara singkat menjadi salah satu yang selalu menyebabkan pesan "aplikasi berhenti merespons".
alzee
33

Ya, Anda dapat melakukannya dengan hanya membuat BroadcastReceiveryang memanggil Anda Servicesaat Aplikasi Anda boot. Inilah jawaban lengkap yang saya berikan.
Android - Mulai layanan saat boot

Jika Anda tidak menginginkan ikon / peluncur apa pun untuk Aplikasi Anda, Anda juga dapat melakukannya, jangan buat Aktivitas apa pun dengan

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Cukup nyatakan milik Anda Serviceseperti yang dideklarasikan secara normal.

Lalit Poptani
sumber
2
Kedengarannya seperti penanya baik-baik saja dengan memulai saat Serviceboot, tetapi ingin tahu bagaimana tidak memiliki utama Activity, tetapi cukup pastikan bahwa Serviceitu berjalan ketika ikon peluncur ditekan.
Darshan Rivka Whittle
2
Tapi sepertinya mereka menginginkan ikon peluncur yang, ketika ditekan, memastikan bahwa Layanan sedang berjalan. Saran Anda hanya menghilangkan ikon peluncur.
Darshan Rivka Whittle
@LalitPoptani solusinya baik-baik saja. Tetapi layanan saya tidak akan dimulai sampai saya mem-boot ponsel saya.
Meher
4
Saya tidak dapat memulai aplikasi saya tanpa MAIN, LAUNCHER di AndroidMenifest.xml kecuali SyncAdapter. Apakah jawaban Anda benar?
sunghun
1
Saya telah menghapus filter maksud dengan tag tindakan dan kategori. Sekarang Aplikasi tidak lagi berjalan di studio android
Nauman Ash
12

Alasan membuat Aplikasi tanpa aktivitas atau layanan bisa jadi karena membuat aplikasi Widget Layar Beranda yang tidak perlu dimulai.
Setelah Anda memulai sebuah proyek, jangan membuat aktivitas apa pun. Setelah Anda membuat proyek, tekan saja. Studio Android akan berkata No default activity found.

Klik Edit Konfigurasi (Dari menu Jalankan ) dan di bagian opsi Peluncuran, atur nilai Peluncuran ke Tidak Ada . Kemudian klik ok dan jalankan Aplikasi.

( Karena tidak ada aktivitas peluncur, Tidak ada aplikasi yang akan ditampilkan di menu Aplikasi. ).

Mahdi-Malv
sumber
2
Terima kasih, itulah kasus saya. Dalam kasus Anda tidak melihat Edit Konfigurasi seperti saya, pilih Run> Run ... dari menu utama kemudian pilih Ubah Konfigurasi ... .
pm_
6

Android Studio Versi 2.3

Anda dapat membuat Layanan tanpa Aktivitas Utama dengan mengikuti beberapa langkah mudah. Anda akan dapat menginstal aplikasi ini melalui Android Studio dan men-debugnya seperti aplikasi biasa.

Pertama, buat proyek di Android Studio tanpa aktivitas. Kemudian buat kelas Service Anda dan tambahkan layanan ke AndroidManifest.xml Anda

<application android:allowBackup="true"
    android:label="@string/app_name"
    android:icon="@mipmap/ic_launcher"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <service android:name="com.whatever.myservice.MyService">
        <intent-filter>
            <action android:name="com.whatever.myservice.MyService" />
        </intent-filter>
    </service>
</application>

Sekarang, di drop down di samping tombol "Run" (panah hijau), pergi ke "edit konfigurasi" dan di dalam "Launch Options" pilih "Nothing". Ini akan memungkinkan Anda untuk menginstal Layanan Anda tanpa Android Studio mengeluh karena tidak memiliki Aktivitas Utama.

Setelah diinstal, layanan TIDAK akan berjalan tetapi Anda dapat memulainya dengan perintah adb shell ini ...

am startservice -n com.whatever.myservice/.MyService

Dapat memeriksa itu berjalan dengan ...

ps | grep whatever

Saya belum mencobanya, tetapi Anda mungkin dapat membuat Android Studio secara otomatis memulai layanan juga. Ini akan dilakukan di menu "Edit Konfigurasi".

Merc
sumber
Saya mendapatkan kesalahan berikut dari adb shell: Memulai layanan: Intent {cmp = com.example.wolk.myapp / .MyIntentService} Kesalahan: Tidak ditemukan; tidak ada layanan yang dimulai. LOGCAT menunjukkan: ActivityManager: jangan izinkan untuk memulai ServiceInfo {274d8af com.example.wolk.myapp.MyIntentService
Trismegistos