android服務(wù)里生成通知點擊后返回正在運行的程序和當(dāng)前的Activity
想在服務(wù)里生成一個通知,并且點擊通知打開當(dāng)前應(yīng)用程序下單當(dāng)前活動,折騰了半天,網(wǎng)上的那些都不靠譜,試了半天,最后把ActivityManager和反射都用進來了,終于解決了這個問題。這樣在服務(wù)中想恢復(fù)本應(yīng)用的界面就可以實現(xiàn)了。直接貼代碼。
1 ActivityManager manager = (ActivityManager) MyApplication.getInstance().getSystemService(Context.ACTIVITY_SERVICE); 2 List<RunningTaskInfo> list = manager.getRunningTasks(100); 3 String MY_PKG_NAME = "com.example.crazy"; 4 int i=0; 5 for (RunningTaskInfo info : list) { 6 if (info.topActivity.getPackageName().equals(MY_PKG_NAME) || info.baseActivity.getPackageName().equals(MY_PKG_NAME)) { 7 8 //Log.i(TAG,info.topActivity.getPackageName() + " info.baseActivity.getPackageName()="+info.baseActivity.getPackageName()); 9 break; 10 } 11 i++; 12 } 13 RunningTaskInfo info=list.get(i); 14 String className = info.topActivity.getClassName(); //完整類名 15 NotificationManager barmanager=(NotificationManager)MyApplication.getInstance().getSystemService(Context.NOTIFICATION_SERVICE); 16 Notification notice = new Notification(R.drawable.h001,"服務(wù)器發(fā)來信息了",System.currentTimeMillis()); 17 notice.flags=Notification.FLAG_AUTO_CANCEL; 18 Intent appIntent; 19 20 try { 21 appIntent = new Intent(context, Class.forName(className)); 22 } catch (ClassNotFoundException e) { 23 // TODO Auto-generated catch block 24 appIntent = new Intent(context,MainActivity.class); 25 e.printStackTrace(); 26 } 27 28 appIntent.addCategory(Intent.CATEGORY_LAUNCHER); 29 appIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_SINGLE_TOP); 30 PendingIntent contentIntent =PendingIntent.getActivity(context, 0,appIntent,PendingIntent.FLAG_UPDATE_CURRENT); 31 notice.setLatestEventInfo(context,"通知","通知內(nèi)容", contentIntent); 32 barmanager.notify(0,notice);
看懂這段代碼后,你自然也可以寫出返回任意系統(tǒng)正在運行程序,并且決定返回還是啟動某一個活動。達到類似qq的那種效果了。

浙公網(wǎng)安備 33010602011771號