如何从通知栏中的通知中启动Android应用程序中的片段?从通知栏中启动Android应用程序中的片段
我试图执行this answer创建我自己的动作,然后将动作设置为意图,但我不确定如何使用它以及另外需要什么 - 例如向Manifest中添加某些内容。
我有一个通知类,接收上下文,消息,然后是一个动作。然后我想过滤该动作以确定要启动哪个片段,但我不知道如何启动片段而不是启动活动。
这里是我Notifications.java类(不完全):
public class Notifications {
private Context mContext;
public Notifications(Context context) {
this.mContext = context;
}
public static void notify(Context context, String message, String action) {
//Action you invent should include the application package as a prefix — for example: "com.example.project.SHOW_COLOR".
action = "my.package.name.here.frag."+action;
//Construct a user message.
String appName = context.getResources().getString(R.string.app_name);
// Use the Notification manager to send notification
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
// Create a notification using android stat_notify_chat icon.
Notification notification = new Notification(R.drawable.ic_stat_notification, message, 0);
//Sound, lights, vibration.
//REMEMBER PERMISSIONS.
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
notification.defaults |= Notification.DEFAULT_LIGHTS;
// Create a pending intent to open the application when the notification is clicked.
//Restart the app.
Intent launchIntent = null;
//Get the action and based on what the action is, launch the application displaying the appropriate fragment.
if (action.equalsIgnoreCase("friend")){
//New friend notification
//Launch application displaying the list of friends
}
if (action.equalsIgnoreCase("article")){
//New article has been posted
//Launch application displaying the news feed fragment
}
if (action.equalsIgnoreCase("points")){
//Points scored notification
//Launch application displaying the user's profile
}
if (action.equalsIgnoreCase("redeemable")){
//New redeemable is offered
//Launch application displaying the list of redeemables
}
if (!action.equalsIgnoreCase("friend")
&& !action.equalsIgnoreCase("article")
&& !action.equalsIgnoreCase("points")
&& !action.equalsIgnoreCase("redeemable")){
//Not specific, so launch the application from scratch displaying the activity feed
launchIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
}
if(action != null && launchIntent != null){
launchIntent.setAction(action);
}
// Set the notification and register the pending intent to it
notification.setLatestEventInfo(context, appName, message, pendingIntent);
// Trigger the notification
notificationManager.notify(0, notification);
}
}
如何检查片段是否在内存中? – MohsinSyd
String [] frag_tags = {“fragment1”,“fragment2”,“fragment3”}; Fragment frag = getSupportFragmentManager()。findFragmentByTag(frag_tags [fragNumber]); (TAG,“Frag is in memory:”+ String.valueOf(fragNumber));或者, \t \t \t transaction.replace(R.id.lin_main_container,frag,frag_tags [fragNumber]); (TAG,“Recreating frag:”+ String.valueOf(fragNumber));其中, } – marienke
为什么我的操作为空? –