Saya mengetahui ketersediaan Context.getApplicationContext () dan View.getContext () , di mana saya dapat benar-benar memanggil Context.getPackageName () untuk mengambil nama paket aplikasi.
Mereka bekerja jika saya memanggil dari metode yang tersedia untuk suatu View
atau Activity
objek, tetapi jika saya ingin mencari nama paket dari kelas yang benar-benar independen tanpa View
atau Activity
, apakah ada cara untuk melakukan itu (langsung atau tidak langsung)?
android
package
android-context
ef2011
sumber
sumber
Jawaban:
Gagasannya adalah untuk memiliki variabel statis dalam aktivitas utama Anda, dipakai untuk menjadi nama paket. Kemudian hanya referensi variabel itu.
Anda harus menginisialisasi dalam metode kegiatan utama
onCreate()
:Global ke kelas:
Kemudian..
Anda kemudian dapat mengaksesnya melalui
Main.PACKAGE_NAME
.sumber
final
membuatnya tidak dapat diubah, hanya dapat diinisialisasi dalam konstruktor dan hanya sekali .onCreate()
bukan konstruktor. Harap perbaiki jika saya salah.onCreate
harus dipanggil lagi, jadi solusi ini seharusnya tidak menjadi masalah.Jika Anda menggunakan gradle-android-plugin untuk membangun aplikasi Anda, maka Anda dapat menggunakannya
untuk mengambil nama paket dari ruang lingkup apa pun, termasuk. yang statis.
sumber
Jika dengan kata "di mana saja" yang Anda maksud tanpa memiliki eksplisit
Context
(misalnya dari utas latar belakang) Anda harus mendefinisikan kelas dalam proyek Anda seperti:Kemudian di Anda,
manifest
Anda perlu menambahkan kelas ini keName
bidang diApplication
tab. Atau edit xml dan masukkandan kemudian dari mana saja Anda dapat menelepon
Semoga ini bisa membantu.
sumber
Application.onCreate()
telah diubah untuk mencerminkan hal ini: sekarang secara khusus menyatakan "Dipanggil saat aplikasi dimulai, sebelum aktivitas, layanan, atau objek penerima (tidak termasuk penyedia konten)".Jika Anda menggunakan gradle build, gunakan ini:
BuildConfig.APPLICATION_ID
untuk mendapatkan nama paket aplikasi.sumber
sumber
Anda bisa mendapatkan nama paket Anda seperti ini:
Berikut ini opsinya:
sumber
Anda dapat menggunakan metode tidak berdokumen
android.app.ActivityThread.currentPackageName()
:Peringatan: Ini harus dilakukan pada utas utama aplikasi.
Berkat posting blog ini untuk idenya: http://blog.javia.org/static-the-android-application-package/ .
sumber
Bagi mereka yang menggunakan Gradle, seperti yang disebutkan @Billda, Anda bisa mendapatkan nama paket melalui:
Ini memberi Anda nama paket yang dinyatakan dalam grad aplikasi Anda:
Jika Anda tertarik untuk mendapatkan nama paket yang digunakan oleh kelas java Anda (yang terkadang berbeda dari
applicationId
), Anda dapat menggunakanJika Anda bingung mana yang harus digunakan, baca di sini :
sumber
Semoga ini akan berhasil.
sumber
Buat modul java yang akan dijalankan saat memulai aplikasi Anda. Modul ini akan memperluas kelas Aplikasi android dan akan menginisialisasi variabel aplikasi global dan juga berisi rutinitas utilitas di seluruh aplikasi -
Tentu saja, ini bisa termasuk logika untuk mendapatkan nama paket dari sistem android; namun, kode di atas lebih kecil, lebih cepat dan lebih bersih daripada mendapatkannya dari android.
Pastikan untuk menempatkan entri dalam file AndroidManifest.xml Anda untuk memberi tahu Android untuk menjalankan modul aplikasi Anda sebelum menjalankan aktivitas apa pun -
Kemudian, untuk mendapatkan nama paket dari modul lain, masukkan
Menggunakan modul aplikasi juga memberi Anda konteks untuk modul yang perlu tetapi tidak memiliki konteks.
sumber
Gunakan: BuildConfig.APPLICATION_ID untuk mendapatkan NAMA PAKET di mana saja (yaitu; layanan, penerima, aktivitas, fragmen, dll)
Contoh: String PackageName = BuildConfig.APPLICATION_ID;
sumber
Cukup impor Android.app, maka Anda dapat menggunakan:
<br/>Application.getProcessName()<br/>
Dapatkan Nama Proses Aplikasi saat ini tanpa konteks, tampilan, atau aktivitas.
sumber