Bu eski bir soru, ancak açık bir Android özelliği olmadığı için hala aktif. Ve facebook'tan gelen adamlar bir şekilde bir iş buldu - bir şekilde. Bugün, benim için işe yarayan bir yol buldum. Mükemmel değil (bu cevabın sonundaki açıklamalara bakın) ama işe yarıyor!
Ana fikir, ana ekranımda başlatıcı tarafından oluşturulan uygulamamın kısayolunun simgesini güncellemem. Kısayol simgesindeki bir şeyi değiştirmek istediğimde, önce onu kaldırırım ve yeni bir bitmap ile yeniden oluştururum.
İşte kod. Bir düğmesi var increment. Basıldığında, kısayol yeni bir sayma numarası olan bir kısayol ile değiştirilir.
İlk olarak manifestinizde şu iki izne ihtiyacınız var:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
Ardından kısayolları yüklemek ve kaldırmak için bu iki yönteme ihtiyacınız vardır. shortcutAddYöntem içinde bir sayı ile bir bitmap oluşturur. Bu sadece gerçekten değiştiğini göstermek içindir. Muhtemelen bu bölümü uygulamanızda istediğiniz bir şeyle değiştirmek istiyorsunuz.
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);
}
Ve son olarak, ilk kısayolu eklemek ve kısayolu artan bir sayaçla güncellemek için iki dinleyici.
@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);
}
});
}
Uyarılar:
Bu şekilde, Uygulamanız ana ekranda daha fazla kısayolu kontrol ederse de çalışır, örn Intent. Doğru isimlerin kaldırılması ve yeniden yüklenmesi için sadece farklı adlara ihtiyaçları vardır.
Android'deki kısayolların programlı kullanımı, iyi bilinen, yaygın olarak kullanılan ancak resmi olarak desteklenmeyen bir Android özelliğidir. Varsayılan başlatıcıda çalışıyor gibi görünüyor ve başka hiçbir yerde denemedim. Bu yüzden bu kullanıcı e-postalarını aldığınızda beni suçlama "Bu benim XYZ, çift köklü, süper patlama telefonumda çalışmıyor"
Başlatıcı Toast, bir kısayol yüklendiğinde bir ve bir kısayol kaldırıldığında bir yazar. ToastSimgeyi her değiştirdiğimde iki saniye alıyorum. Uygulamamın geri kalanı mükemmel olduğu sürece bu mükemmel değil, ama iyi ...