上一期记录了申请过程,就这个申请过程很恶心啊,卡了我好久。两个Key傻傻分不清楚,导致最后推送一直失败失败失败。
让我们继续,ADT升级最新版后,打开SDK Manager,下载下面这些,有些人会在Extra下面直接有那个Google Cloud message,我是死活没有,后来好像就是这么折腾上的。
安装完以后就会在自己的sdk的路径的extra下面有gcm的项目,到这里去copy那个gcm.jar到你自己的工程里面并且引用。
————————————----------------------------------——分割线—————————-————————
下面就是代码部分
首先是AndroidManifest.xml的编写,添加权限如下:
<permission
android:name=“包名.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name=“包名.permission.C2D_MESSAGE" />
<!-- App receives GCM messages. -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<!-- GCM connects to Google Services. -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- GCM requires a Google account. -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
其次是添加一个receive和一个service
<pre name="code" class="html"><receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver”
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name=“包名" />
</intent-filter>
</receiver>
<service android:name=".GCMIntentService" />
接下来如果你不需要重写BroadCast和Service就直接去copy那个gcm文件夹下面的samples里面的gcm-demo-client工程中CommonUtilities.java,GCMIntentService.java,ServerUtilities.java,这三个文件到你的工程,然后把CommonUtili那个文件中的SERVER_URL和Sender_ID为你自己的信息,URl是你自己搭建的服务器的地址,下一章记录服务器的搭建,Sender_ID是你之前那个ProjectNumber.
最后一步就是写一个MainActivity去调用注册了
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
registerReceiver(mHandleMessageReceiver,new IntentFilter(CommonUtilities.DISPLAY_MESSAGE_ACTION));
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
GCMRegistrar.register(this, SENDER_ID);
} else {
if (GCMRegistrar.isRegisteredOnServer(this)) {
System.out.println("监听服务已经被唤醒,当前rID为:->"+regId);
}else {
new Thread(new Runnable() {
@Override
public void run() {
boolean registered = ServerUtilities.register(MainActivity.this, regId);
}
}).start();
}
}
}
public void start_google_service(View view) {
GCMRegistrar.unregister(this);
}
private final BroadcastReceiver mHandleMessageReceiver =
new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String newMessage = intent.getExtras().getString("message");
System.out.println("从服务器传过来的消息:"+newMessage);
}
};
这样就可以了。希望对大家有帮助。。