Launch a fragment in my Android application from the notification bar

强颜欢笑 提交于 2019-12-01 06:47:32
marienke

So this was actually pretty easy. Hopefully I can help someone else see this too.

I send an action to this notify function. The I add that action to my intent to launch an activity. In my case I open the launching activity, because all the fragments are loaded from within that activity based on what the user does. So I set the action using setAction and the I use that action in the activity as below.

My Notifications.java class changed to this:

public static void notify(Context context, String message, String  action) {

    action = action.toUpperCase();

    // Create a pending intent to open the the application when the notification is clicked.
    //Restart the app.
    Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());

    if(action != null && launchIntent != null){         
        launchIntent.setAction(action);         
    }

    PendingIntent pendingIntent = PendingIntent.getActivity(context, -1, launchIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    notification.when = System.currentTimeMillis();  
    notification.flags |= Notification.FLAG_AUTO_CANCEL; 

    // Set the notification and register the pending intent to it
    notification.setLatestEventInfo(context, appName, message, pendingIntent);

    // Trigger the notification
    notificationManager.notify(0, notification);
}

And then in my activity from where I load the fragments, I get the action and filter it:

Intent intent = getIntent();

try{
    String action = intent.getAction().toUpperCase();

    if(action != null){
        if(action.equalsIgnoreCase(getResources().getString(R.string.notification_action_friend))){
                goFrag(getResources().getInteger(R.integer.FRAG_A_INT));
            }
        if(action.equalsIgnoreCase(getResources().getString(R.string.notification_action_article))){
                goFrag(getResources().getInteger(R.integer.FRAG_B_INT));
            }
        if(action.equalsIgnoreCase(getResources().getString(R.string.notification_action_points))){
                goFrag(getResources().getInteger(R.integer.FRAG_C_INT));
            }
        if(action.equalsIgnoreCase(getResources().getString(R.string.notification_action_redeemable))){
                goFrag(getResources().getInteger(R.integer.FRAG_D_INT));
            }
        if(action.equalsIgnoreCase(getResources().getString(R.string.notification_action_dance))){
                goFrag(getResources().getInteger(R.integer.FRAG_E_INT));
            }
        }else{
            Log.d(TAG, "Intent was null");
        }
    }catch(Exception e){
        Log.e(TAG, "Problem consuming action from intent", e);              
    }

In my goFrag function I replace the fragment if the required fragment is still in memory (meaning the user was there earlier and it hasn't been destroyed yet), or I create a new fragment required.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!