2013-03-25 3 views
2

Я где-то читал (но больше не могу его найти), чтобы можно было отправлять дополнительные функции из ярлыка на главном экране устройства. Я успешно создал ярлык, но Bundle extras = getIntent().getExtras(); дает nullpointer.Рабочий стол ярлыка, как отправить дополнительные данные

создать ярлык следующим образом:

Intent shortcutIntent = new Intent(this.getApplicationContext(), 
         Shortcut_Activity.class); 

       shortcutIntent.setAction(Intent.ACTION_MAIN); 

       Intent addIntent = new Intent(); 
       addIntent 
         .putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
       addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name); 
       addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, 
         Intent.ShortcutIconResource.fromContext(this.getApplicationContext(), 
           R.drawable.ic_shortcut)); 
       addIntent.putExtra("ID", id); //THIS IS THE EXTRA DATA I WANT TO ATTACH 
       addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
       this.getApplicationContext().sendBroadcast(addIntent); 

Возможно ли это? И если да, то как?

ответ

2

Как здесь: http://www.joulespersecond.com/2010/04/android-tip-effective-intents/

К счастью, есть решение. Лучше всего поставить идентификатор строки как часть URI, а не как часть дополнительного. Таким образом, предыдущий код становится чем-то вроде этого:

void returnShortcut(int rowId, String shortcutName) { 
    Intent i = new Intent(this, ShowInfoActivity.class); 
    i.setData(ContentUris.withAppendedId(BASE_URI, rowId)); 
    Intent shortcut = new Intent(); 
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, i); 
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutName); 
    setResult(RESULT_OK, shortcut); 
    finish(); 
} 

base_uri может быть что угодно, но это должно быть что-то, что это специфичные для вашего приложения. Дело в том, что URI данных используется для определения того, являются ли два намерения равными, поэтому система будет создавать для этого новую активность, даже если одно и то же действие с разными данными находится в стеке вашей задачи.

4

Да, я достиг его, Вот код

private void addShortcut() { 
    //Adding shortcut for MainActivity 
    //on Home screen 
    Intent shortcutIntent = new Intent(getApplicationContext(), 
      HOMESHORTCUT.class); 
    //Set Extra 
    shortcutIntent.putExtra("extra", "shortCutTest "); 

    shortcutIntent.setAction(Intent.ACTION_MAIN); 

    Intent addIntent = new Intent(); 
    addIntent 
      .putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "HelloWorldShortcut"); 
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, 
      Intent.ShortcutIconResource.fromContext(getApplicationContext(), 
        R.drawable.ic_launcher)); 

    addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 

    getApplicationContext().sendBroadcast(addIntent); 


} 
//GET Extra in HOMESHORTCUT activity. 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mTextExtra=new TextView(this); 
     Bundle bundel=getIntent().getExtras(); 
     String getExString=getIntent().getExtras().getString("extra"); 
     mTextExtra.setText(getExString); 
     setContentView(mTextExtra); 
    } 
+0

но этот код будет вылетать, если расслоение, здесь названные дополнительные (по любой причине) равна нулю, тем не менее – JacksOnF1re

+0

только в случае, если вы все еще есть исключения нулевого , ** УДАЛИТЬ старые ярлыки ** и создать новые, если вы используете 'addIntent.putExtra (" duplicate ", false);' – Choletski

Смежные вопросы