Search code examples
androidandroid-intentintentfilter

How can I set up the launch intent for shortcut on home screen? Android


I am very new to android and I am having trouble getting this down. I have been succesfully able to create a shortcut from within my app. The only problem is that I cannot dictate what happenes after the shortcut is clicked. It just launches my MainActivity, but I want it to also pass it data when the main activity is selected. Here is what I have...

Intent shortcutIntent = new Intent(getActivity().getApplicationContext(),
            MainActivity.class);

    shortcutIntent.setAction(Intent.ACTION_MAIN);

    Intent addIntent = new Intent();
    addIntent
            .putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, f.getName());
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
            Intent.ShortcutIconResource.fromContext(getActivity().getApplicationContext(),
                    R.drawable.icon_folderbluegray));
    addIntent.putExtra("info for Main Activity","Hello");

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

But when I do this, I get null...

Bundle extras = getIntent().getExtras();

Here is what I have in the Mainfest.

             <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.CREATE_SHORTCUT"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>

Solution

  • what you are doing is sendigBroadcast.... thats why you are getting null

    getActivity().getApplicationContext().sendBroadcast(addIntent);
    

    that's why you get null in the bundle here

    Bundle extras = getIntent().getExtras();
    

    To handle the result you need to implement a broadcast receiver

    EDIT IMPLEMENT THE RECEIVER

    public final BroadcastReceiver noteCompletedReceiver = new BroadcastReceiver() {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(NoteListActivity.this, "Broadcast received",   Toast.LENGTH_LONG).show();
           //HANDLE HERE THE INTENT
        }
    };
    

    also you need to set a intentFilter, you can register dynamic in your onCreate method like

    IntentFilter filter = new IntentFilter(=====SOME CONSTANT THAT YOU DEFINE AND THAS PASSED FROM THE STARTING INTENT====);
    registerReceiver(noteCompletedReceiver, filter);
    

    and in onDestroy method of your activity you need to call

    unregisterReceiver(noteCompletedReceiver);