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);

出来ますか?もしそうなら、どうやって?

4

2 に答える 2

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);
    }
于 2014-11-24T06:43:59.957 に答える
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は何でもかまいませんが、アプリケーションに固有のものである必要があります。重要なのは、2つのインテントが等しいかどうかを判断するためにデータURIが使用されるため、異なるデータを持つ同じアクティビティがタスクのスタックにある場合でも、システムはこのための新しいアクティビティを作成することになります。

于 2013-03-26T08:10:01.463 に答える