2013-03-25 62 views
2

我已經閱讀過某處(但我無法再找到它),應該可以在設備主屏幕上從快捷方式發送附加內容。我成功創建了一個快捷方式,但Bundle extras = getIntent().getExtras();給出了一個空指針。快捷方式主屏幕,如何發送演示文稿

我創建快捷方式如下:

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/

幸運的是,有一個解決方案。更好的方法是將行ID作爲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 2014-12-05 16:09:56

+0

以防萬一你還有空例外,**刪除舊的快捷方式**,讓新的創建如果你使用'addIntent.putExtra(「duplicate」,false);' – Choletski 2017-08-31 13:30:00

相關問題