通过service和handler实现Notification在后台打开activity

    一直以来都是在csdn查看各种大神的贡献资料,但自己却没有为他们做点什么。这几天在做一个即时聊天软件,需要实现一个功能:用户登录后,可以后台接收消息,通过Notification在消息栏提示,用户点击消息栏可以跳转到聊天界面。

    为了模拟接收短信,我新建了三个Activity。在FirstActivity中我打开了service服务;在SecondActivity中我通过Handler的sendMessage方法发送数据,模拟收到短信;在第NotificationService.java类中,我通过重写Handler的handlerMessage方法,来实时监听,若收到sendMessage发送的数据,则跳转到ThirdActivity界面。Ok,闲话少说,直接上码:

Info.java:

package com.zr.android.info;

import android.os.Handler;

public class Info {
	/** 实现界面更新 */
	public static Handler jumpHandler = null;
}

FirstActivity.java:

package com.zr.android;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class FirstActivity extends Activity{

	Button button1;
	@Override
	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.first);
		button1 = (Button)findViewById(R.id.button1);
		button1.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
				startActivity(intent);
				//启动NotificationService  
				Intent notificationServiceIntent = new Intent(); 
				notificationServiceIntent.setAction("com.zr.android.service.NotificationService"); 
	            startService(notificationServiceIntent); 
			}
			
		});
		
	}
	
}

SecondActivity.java:

package com.zr.android;

import com.zr.android.info.Info;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class SecondActivity extends Activity{
	Button button1;
	@Override
	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.second);
		button1 = (Button)findViewById(R.id.button1);
		button1.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				android.os.Message meetmsg = new android.os.Message();	//创建handler消息
			    meetmsg.arg1=1;  
			    Info.jumpHandler.sendMessage(meetmsg);
			}
			
		});
		
	}
}

ThirdActivity.java:

package com.zr.android;


import android.app.Activity;
import android.os.Bundle;


public class ThirdActivity extends Activity{


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.third);
	}
	
}

NotificationService.java

package com.zr.android.service;


import com.zr.android.R;
import com.zr.android.ThirdActivity;
import com.zr.android.info.Info;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;


public class NotificationService extends  Service{

	static final int NOTIFICATION_ID = 0x1123;
	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}

	   @Override 
	    public void onCreate() { 
	        super.onCreate(); 
	    	Info.jumpHandler = new Handler(){
	    		@Override
	    		public void handleMessage(Message msg) {
	    			if(msg.arg1==1){
	    				//开启一个对话框或者是对话框形式的activity
	    				//创建一个启动其他Activity的Intent
	    				Intent intent = new Intent(getApplicationContext(), ThirdActivity.class);
	    				PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0, intent , 0);
	    				//创建一个Notification
	    				Notification notify = new Notification();
	    				//为Notification设置图标,该图标显示在状态栏
	    				notify.icon = R.drawable.notify;
	    				//为Notification设置文本内容,该文本会显示在状态栏
	    				notify.tickerText = "启动其他Activity的通知";
	    				//为Notification设置发送时间
	    				notify.when = System.currentTimeMillis();
	    				//为Notification设置声音
	    				notify.defaults = Notification.DEFAULT_SOUND;
	    				//为Notification设置默认声音、默认振动、默认闪光灯
	    				notify.defaults = Notification.DEFAULT_ALL;
	    				//点击后关闭notifycation
	    				notify.flags=Notification.FLAG_AUTO_CANCEL;
	    				//设置事件信息
	    				notify.setLatestEventInfo(getApplicationContext(), "普通通知","点击查看", pi);
	    				//获取系统的NotificationManager服务
	    				NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
	    				//发送通知
	    				notificationManager.notify(NOTIFICATION_ID, notify);
	    			}
	    			super.handleMessage(msg);
	    		}
	    	};
	    }
	    @Override 
	    public void onDestroy() { 
	        super.onDestroy(); 
	    }
}

first.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="1111111111111111111" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开启service" />

</LinearLayout>


second.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="22222222222222222" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送handler信息" />

</LinearLayout>


third.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="333333333333333333" />

</LinearLayout>


AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.zr.android"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".FirstActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SecondActivity"></activity>
        <activity android:name=".ThirdActivity"></activity>
        <service android:name="com.zr.android.service.NotificationService">  
    		<intent-filter>  
        		<action android:name="com.zr.android.service.NotificationService" />  
    		</intent-filter>  
		</service> 
    </application>
	<!-- 添加操作闪光灯的权限 -->
	<uses-permission android:name="android.permission.FLASHLIGHT"/>
	<!-- 添加操作振动器的权限 -->
	<uses-permission android:name="android.permission.VIBRATE"/>
</manifest>

如果有什么问题欢迎大家指正,我们一起探讨。还有Notification设置部分是参考《疯狂Android讲义》的,在这表示感谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值