Ini pertanyaan lama, tetapi masih aktif karena tidak ada fitur Android eksplisit. Dan orang-orang dari facebook menemukan pekerjaan - entah bagaimana. Hari ini, saya menemukan cara yang bekerja untuk saya. Tidak sempurna (lihat keterangan di akhir jawaban ini) tetapi berhasil!
Gagasan utamanya adalah, saya memperbarui ikon pintasan aplikasi saya, yang dibuat oleh peluncur di layar beranda. Ketika saya ingin mengubah sesuatu pada ikon shortcut, saya menghapusnya terlebih dahulu dan membuatnya kembali dengan bitmap baru.
Ini kodenya. Ini memiliki tombol increment
. Saat ditekan, pintasan diganti dengan yang memiliki nomor penghitungan baru.
Pertama, Anda memerlukan dua izin ini dalam manifes Anda:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
Maka Anda memerlukan dua metode ini untuk menginstal dan menghapus instalan pintas. The shortcutAdd
Metode menciptakan bitmap dengan nomor di dalamnya. Ini hanya untuk menunjukkan bahwa itu benar-benar berubah. Anda mungkin ingin mengubah bagian itu dengan sesuatu, Anda ingin di aplikasi Anda.
private void shortcutAdd(String name, int number) {
// Intent to be send, when shortcut is pressed by user ("launched")
Intent shortcutIntent = new Intent(getApplicationContext(), Play.class);
shortcutIntent.setAction(Constants.ACTION_PLAY);
// Create bitmap with number in it -> very default. You probably want to give it a more stylish look
Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Paint paint = new Paint();
paint.setColor(0xFF808080); // gray
paint.setTextAlign(Paint.Align.CENTER);
paint.setTextSize(50);
new Canvas(bitmap).drawText(""+number, 50, 50, paint);
((ImageView) findViewById(R.id.icon)).setImageBitmap(bitmap);
// Decorate the shortcut
Intent addIntent = new Intent();
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bitmap);
// Inform launcher to create shortcut
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
getApplicationContext().sendBroadcast(addIntent);
}
private void shortcutDel(String name) {
// Intent to be send, when shortcut is pressed by user ("launched")
Intent shortcutIntent = new Intent(getApplicationContext(), Play.class);
shortcutIntent.setAction(Constants.ACTION_PLAY);
// Decorate the shortcut
Intent delIntent = new Intent();
delIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
delIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
// Inform launcher to remove shortcut
delIntent.setAction("com.android.launcher.action.UNINSTALL_SHORTCUT");
getApplicationContext().sendBroadcast(delIntent);
}
Dan akhirnya, berikut adalah dua pendengar untuk menambahkan pintasan pertama dan memperbarui pintasan dengan penghitung yang bertambah.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
findViewById(R.id.add).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
shortcutAdd("changeIt!", count);
}
});
findViewById(R.id.increment).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
shortcutDel("changeIt!");
count++;
shortcutAdd("changeIt!", count);
}
});
}
Catatan:
Cara ini juga berfungsi jika Aplikasi Anda mengontrol lebih banyak pintasan di layar beranda, misalnya dengan tambahan yang berbeda di menu Intent
. Mereka hanya perlu nama yang berbeda sehingga yang benar dihapus dan diinstal ulang.
Penanganan pintasan terprogram di Android adalah fitur Android yang terkenal, banyak digunakan tetapi tidak didukung secara resmi. Tampaknya berfungsi pada peluncur default dan saya tidak pernah mencobanya di tempat lain. Jadi jangan salahkan saya, ketika Anda mendapatkan email pengguna ini "Ini tidak berfungsi pada XYZ saya, double root, ponsel super blasted"
Peluncur menulis Toast
kapan pintasan diinstal dan yang ketika dihapus. Jadi saya mendapatkan dua Toast
s setiap kali saya mengubah ikon. Ini tidak sempurna, tapi yah, selama sisa aplikasi saya sempurna ...
Coba ini, ini berfungsi baik untuk saya:
1. Ubah
MainActivity
bagian Anda diAndroidManifest.xml
, hapus dari itu, sejalan denganMAIN
kategori diintent-filter
bagian2. Buat
<activity-alias>
, untuk masing-masing ikon Anda. Seperti ini3. Set terprogram: atur atribut ENABLE untuk yang sesuai
activity-alias
Catatan, Setidaknya satu harus diaktifkan setiap saat.
sumber
Anda tidak dapat mengubah manifes atau sumber daya di APK yang ditandatangani dan disegel, kecuali melalui pembaruan perangkat lunak.
sumber
Secara programatis, Anda mungkin ingin mempublikasikan peluncur aplikasi sendiri:
Catatan: metode ini tidak lagi berfungsi dimulai dengan Android 8.0 - Oreo
Di AndroidManifest.xml Anda, tambahkan:
Maka Anda perlu membuat maksud peluncur aplikasi Anda:
Buat niat pintas instal dengan peluncur aplikasi dan ikon khusus:
Dan akhirnya meluncurkan maksud siaran:
sumber
Dengan asumsi Anda bermaksud mengubah ikon yang ditampilkan di layar beranda, ini dapat dengan mudah dilakukan dengan membuat widget yang melakukan hal ini. Inilah artikel yang menunjukkan bagaimana hal itu dapat dilakukan untuk aplikasi jenis "pesan baru" yang mirip dengan iPhone:
http://www.cnet.com/8301-19736_1-10278814-251.html
sumber
@ PA's solution sebagian berfungsi untuk saya. Detail temuan saya di bawah ini:
1) Cuplikan kode pertama salah, lihat di bawah:
2) Harus menggunakan kode berikut untuk menonaktifkan semua ikon sebelum mengaktifkan yang lain, jika tidak maka akan menambah ikon baru, alih-alih menggantinya.
TETAPI, jika Anda menggunakan kode di atas, maka pintasan di homescreen akan dihapus! Dan itu tidak akan ditambahkan kembali secara otomatis. Anda mungkin dapat menambahkan ikon kembali secara terprogram, tetapi mungkin tidak akan tetap pada posisi yang sama seperti sebelumnya.
3) Perhatikan bahwa ikon tidak akan segera diubah, mungkin perlu beberapa detik. Jika Anda mengkliknya tepat setelah mengubah, Anda mungkin mendapatkan pesan kesalahan yang mengatakan: "Aplikasi tidak diinstal".
Jadi, IMHO solusi ini hanya cocok untuk mengubah ikon di peluncur aplikasi saja, bukan untuk pintasan (yaitu ikon di homescreen)
sumber
Coba solusi ini
Tambahkan kode berikut ketika Anda ingin mengubah ikon aplikasi Anda
sumber
AndroidManifest.xml
contoh:Kemudian ikuti di bawah ini kode yang diberikan di
MainActivity
:sumber
com.pritesh.resourceidentifierexample.MainActivity-Red doesn't exist in com.pritesh.resourceidentifierexample
pengecualian. di sini saya telah menggunakan nama manifes Anda hanya untuk menunjukkan masalah sayaUntuk mendapatkan solusinya dengan Markus bekerja, saya membutuhkan Intent pertama jadi:
sumber
Menerapkan saran yang disebutkan, saya menghadapi masalah aplikasi terbunuh setiap kali ikon default diubah menjadi ikon baru. Jadi telah mengimplementasikan kode dengan beberapa tweak. Langkah 1). Dalam file AndroidManifest.xml, buat aktivitas default dengan android: enabled = "true" & alias lainnya dengan android: enabled = "false". Anda tidak akan berisi tetapi menambahkannya dengan android: enabled = "true".
Langkah 2). Buat metode yang akan digunakan untuk menonaktifkan aktivitas-alias pertama yang berisi ikon default & mengaktifkan alias kedua yang berisi ikon perlu diubah.
Langkah 3). Sekarang panggil metode ini tergantung pada kebutuhan Anda, katakanlah pada klik tombol atau tanggal khusus atau kondisi khusus, seperti -
Semoga ini akan membantu mereka yang menghadapi masalah aplikasi terbunuh pada perubahan ikon. Selamat Coding :)
sumber