`

Notification防止程序退出

 
阅读更多

不是QQ的那种效果,我实现的是:当用户点击BACK键的时候,拦截这个事件,弹出一个对话框,提示用户是否退出,如果用户点击是,则退出。当用户点击HOME键。这时候在状态栏上面发送一个提醒,表示程序还在运行。

public class TestNotificationActivity extends Activity
{
	private NotificationManager notificationManager;
	private Notification notification;
	private Button btnExit;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notification = new Notification(R.drawable.ic_launcher, "", System.currentTimeMillis());

        btnExit = (Button)findViewById(R.id.btn_exit);
        btnExit.setOnClickListener(new BtnExitClickedListener());
        Log.d("11111111111", "Oncreate");
        //notificationManager.cancelAll();
           
    }
    class BtnExitClickedListener implements OnClickListener
    {

		public void onClick(View v) 
		{
			notificationManager.cancelAll();//清理notification
			android.os.Process.killProcess(android.os.Process.myPid());//整个结束掉
		}
    	
    }
	public boolean onKeyDown(int keyCode, KeyEvent event) 
	{ 
//	    if(keyCode==KeyEvent.KEYCODE_HOME )
//	    {
//	       Log.d("home", "home");
//	     //  flag = true;
//	       finish();//实际上这里已经将应用程序杀死了。而从notification中启动只是启动指定的Activity。程序已经死掉了。返回键同样道理
//	       
//	       //return true;
//	    }
	    if(keyCode == KeyEvent.KEYCODE_BACK )
	    {
	    	showDialog();//调用对话框
		    Log.d("back", "back");
		  // return true;
	    }
		   return super.onKeyDown(keyCode, event); 
	} 
//	@Override
//
//	//要有这个监听home键才可以实现
//	 public void onAttachedToWindow()
//
//	 { // TODO Auto-generated method stub 
//
//	    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
//
//	    super.onAttachedToWindow();
//
//	 } 

    /**如果用户按下home键,会调用onStop()。发送一个通知。在这个通知里面就可以回到原来的界面,而不会调用onCreate方法*/
    @Override
	protected void onStop() 
	{
    	
    	notification.flags = Notification.FLAG_ONGOING_EVENT;//这个表示在运行中
		Intent notificationIntent = new Intent(TestNotificationActivity.this, TestNotificationActivity.class);//这个实际上只是指定启动一个Activity
		notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
		PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
		notification.setLatestEventInfo(this, "哇哈哈","哥在运行中...", contentIntent);
		notificationManager.notify(R.drawable.ic_launcher, notification);
		Log.d("111111111", "onStop");

		super.onStop();
	}
  
    /**  重新获得焦点的时候清理notification*/
    @Override
	protected void onResume() 
	{
		notificationManager.cancelAll();
		super.onResume();
	}

	/**  创建一个对话框,确认是否退出*/
	private void showDialog()
	{
		new AlertDialog.Builder(this).setTitle("是否退出应用程序?")
		.setPositiveButton("确定", new DialogInterface.OnClickListener(){
			
			public void onClick(DialogInterface dialog, int which) {
					finish();
			}
		}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
			
			public void onClick(DialogInterface dialog, int which) {
				
			}
		}).show();
	}

	
}
 


  • 大小: 24.3 KB
  • 大小: 452.5 KB
分享到:
评论

相关推荐

    iOS 拦截奔溃 使程序不在崩溃

    通过在Runloop中添加观察者,我们可以在程序即将退出时获取通知,并采取措施防止奔溃。 以下是一个使用Runloop防止奔溃的例子: ```objc - (void)applicationWillResignActive:(UIApplication *)application { //...

    安卓Android源码——Android 英语单词记忆程序源码.zip

    在单词记忆程序中,可能需要在适当的时候保存用户的学习状态,防止意外退出时丢失数据。 九、异步处理 考虑到Android应用的性能和用户体验,对数据库的操作或网络请求通常会在后台线程(如AsyncTask)中执行,以...

    Android 电话及短信的监听程序源码-IT计算机-毕业设计.zip

    服务可以防止在用户退出应用后失去监听功能。同时,可能还会有一个通知栏通知(Notification),以便用户知道应用正在运行并监听。 此外,为了实现完整的毕业设计,源码可能还包括了UI设计,比如设置界面供用户开启...

    localService

    在Android开发中,`LocalService` 是一个常用于在同一个应用程序内部进行组件间通信的机制。这个机制允许一个服务(Service)与应用的其他部分,如Activity或BroadcastReceiver,进行高效且安全的数据交换。在标题...

    GREE 平台文档中文版

    此外,在应用程序退出时也应调用相应的终止方法,释放资源并关闭连接。 #### 4.4 加密ConsumerKey/Secret 为了保护应用程序的身份验证信息,需要对Consumer Key和Secret进行加密处理。这一步骤非常重要,可以防止...

    Python监控电脑微信消息通知,监控微信消息提醒消息列表和群消息监控群转发

    如果捕获到键盘中断(如按下Ctrl+C),程序将优雅地退出;若出现其他异常,也会打印错误信息。 这段代码展示了如何利用Python自动化处理日常任务,例如监控即时通讯软件中的消息。虽然这个例子是针对微信,但`ui...

    Wake_Up:唤醒应用程序(第一个项目)

    为了防止被系统停止,可以在Service中创建一个Notification,让用户知道服务正在运行。 ```java startForeground(NOTIFICATION_ID, notification); ``` 4. **WakeLock**: PowerManager.WakeLock可以防止设备进入...

    IOS 中UIApplication详解及实例

    在iOS开发中,UIApplication是应用程序的核心对象,它管理着整个应用程序的生命周期,包括启动、运行、暂停、恢复和退出等过程。UIApplication不仅控制着应用程序窗口(UIWindow)和视图控制器(UIViewController)...

    snmp编程常用资料

    - **描述**: 在退出应用程序前,需要调用`SnmpCleanup`函数来清理WinSNMP环境。这一步骤非常重要,因为它会释放所有与WinSNMP环境相关的资源。 #### 二、WinSNMP环境的一般编程概念 除了上述的核心编程任务之外,...

    qq聊天系统

    6. **实时推送**:为了实现即时消息通知,QQ可能会利用推送服务,如APNs(Apple Push Notification Service)或GCM(Google Cloud Messaging,现为Firebase Cloud Messaging)。这样,即使应用程序在后台运行,也能...

    实现安卓一段时间不操作执行执行某段代码类似于屏保源码

    同时,为了防止屏保与正常应用间的交互问题,需要处理好屏幕解锁后的逻辑,例如使用`FLAG_SHOW_WHEN_LOCKED`和`FLAG_DISMISS_KEYGUARD`标志来控制屏保的显示和隐藏。 5. **TV菜单程序的自动关闭**:对于TV应用,...

     真机平台15E217

    6. **App生命周期管理**:了解应用如何启动、运行、暂停、恢复和退出,以及如何处理内存警告。 7. **Core Data**:苹果提供的数据持久化框架,用于存储和管理应用的数据。 8. **网络编程**:包括使用URLSession...

    ios-(单例)简单的夜间模式Demo.zip

    - `Notification`:应用可能监听特定的通知(如系统进入或退出夜间模式),以便在适当的时候切换到相应的主题。 - `Appearance Proxy`:对于不支持`UIAppearance`的自定义视图,可以通过代理对象来改变它们在夜间...

    Android安卓经典设计学习例程源代码-ServiceSample.rar

    在Android开发中,Service是应用程序组件之一,它在后台长时间运行,即使用户界面不在活动状态。ServiceSample是一个经典的Android学习项目,旨在帮助开发者深入理解如何在Android应用中使用Service组件。这个压缩包...

    androidpn 服务端和android端源代码

    "AndroidPN 服务端和Android端源代码"是关于Android Push Notification(AndroidPN)系统的一套开源实现,它包括服务端和客户端两部分。这个项目主要用于帮助开发者实现在Android设备上进行远程消息推送,这对于实时...

    android通过Service进行文件下载,后台下载

    本教程将深入探讨如何利用Service组件在Android设备上实现文件的后台下载,确保即使用户退出应用程序,文件下载也能继续进行。 ### 1. Android Service基础知识 Service是Android四大组件之一,它在后台运行,没有...

    android在线聊天

    本项目标题“android在线聊天”表明我们要探讨的是如何在Android设备上开发一款能够支持实时通信的应用程序。描述中的“安卓客户端在线聊天”进一步强调了我们的关注点在于客户端的实现,而非服务器端。 首先,我们...

    ANDROID_KEYCODE.docx

    5. **KEYCODE_BACK** (返回键):键值为4,是Android中最常用的功能键之一,用于返回上一级界面或退出当前应用。 6. **KEYCODE_SEARCH** (搜索键):键值为84,通常用于启动设备上的搜索引擎或在当前应用中执行搜索...

    ios-购物车.zip

    7. **本地存储**:为防止网络断开或应用退出导致数据丢失,购物车内容通常会保存在本地,如使用UserDefaults或CoreData。 8. **通知与代理**:项目中可能使用了Notification或Delegate机制,让不同界面或模块之间...

    HACMP&RAC启停操作

    在AIX操作系统环境下,HACMP用于管理和保护集群中的应用程序和服务,而Oracle RAC则是在多台服务器上共享同一个数据库实例的解决方案。 首先,我们来理解HACMP。HACMP是IBM为企业级AIX环境设计的一种集群技术,它...

Global site tag (gtag.js) - Google Analytics