Android在通知点击时打开特定选项卡片段
我有一个android应用程序,它使用操作栏标签。还有一个通知系统 我想在单击通知时直接打开特定选项卡。如何做到这一点(因为通知挂起意图只能打开活动,而我的主要活动包含3个选项卡的3个片段) 以下是选项卡的Main活动的代码Android在通知点击时打开特定选项卡片段,android,android-fragments,android-actionbar,android-notifications,Android,Android Fragments,Android Actionbar,Android Notifications,我有一个android应用程序,它使用操作栏标签。还有一个通知系统 我想在单击通知时直接打开特定选项卡。如何做到这一点(因为通知挂起意图只能打开活动,而我的主要活动包含3个选项卡的3个片段) 以下是选项卡的Main活动的代码 public class MaintabActivity extends Activity { public static Context appContext; public static MapView mMapView; /** Called when the
public class MaintabActivity extends Activity {
public static Context appContext;
public static MapView mMapView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainsc);
appContext = getApplicationContext();
startService(new Intent(this, MyService.class));
//ActionBar
ActionBar actionbar = getActionBar();
actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab ChatTab = actionbar.newTab().setText("Chat");
ActionBar.Tab MapsTab = actionbar.newTab().setText("Maps");
ActionBar.Tab SplashTab=actionbar.newTab().setText("Splash");
Fragment ChatFrag = new ChatActivity();
MapActivity mMapFragment = MapActivity.newInstance();
Fragment SplashFrag = new SplashActivity();
ChatTab.setTabListener(new MyTabsListener(ChatFrag));
MapsTab.setTabListener(new MyTabsListener(mMapFragment));
SplashTab.setTabListener(new MyTabsListener(SplashFrag));
actionbar.addTab(ChatTab);
actionbar.addTab(MapsTab);
actionbar.addTab(SplashTab);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("tab", getActionBar().getSelectedNavigationIndex());
}
}
class MyTabsListener implements ActionBar.TabListener {
public Fragment fragment;
public MyTabsListener(Fragment fragment) {
this.fragment = fragment;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
Toast.makeText(MaintabActivity.appContext, "Reselected!", Toast.LENGTH_LONG).show();
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(R.id.fragment_container, fragment);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(fragment);
}
}
这是服务中显示通知的代码
private void showNotification() {
CharSequence text = getText(R.string.local_service_started);
// Set the icon, scrolling text and timestamp
Notification notification = new Notification(R.drawable.ic_launcher, text,
System.currentTimeMillis());
// The PendingIntent to launch our activity if the user selects this notification
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
new Intent(this, MaintabActivity.class), 0);
// Set the info for the views that show in the notification panel.
notification.setLatestEventInfo(this, getText(R.string.local_service_label),
text, contentIntent);
// Send the notification.
mNM.notify(NOTIFICATION, notification);
}
传递指定要打开的选项卡的操作,以及挂起的意图中的意图。在传递的activity retrieve操作(请参见getIntent())中,并基于它打开一个特定选项卡
Intent intent = new Intent(this, Home.class);
intent.setAction("OPEN_TAB_1");
PendingIntent pending intent = PendingIntent.getService(this, 0, intent, 0);
// In OnCreate() or depending on implementation
if(getIntent().getAction().equals("OPEN_TAB_1") {
// Open Tab
}
在这里找到我的答案:。我认为这与在你的意图中添加额外的没有多大区别,但是利用安卓的动作-想法是很好的
将操作发送到您的通知功能:
public static void notify(Context context, String message, String action) {
action = action.toUpperCase();
//...
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);
}
然后获得动作并启动相应的片段 @user2319636发布一些代码。什么代码?它的常规操作栏选项卡,我想在单击notification时打开假定选项卡B。user2319636-当您单击notification时,它将调用包含选项卡的活动,您可以通过以下方式调用viewPager中的特定片段--viewPager.setCurrentItem(position);如果有两种不同类型的通知,并且我想打开不同的选项卡,该怎么办?活动如何知道单击了哪个通知?@user2319636,您可以通过通知传递选项卡位置…这样,当调用活动时,它将根据片段在视图页面中的位置显示。发布一些代码以便我可以帮助您。如果您使用ActionBar,请调用ActionBar的selectTab()方法(android.support.v7.app)调用actionBar.setSelectedNavigationItem(您的标签号);