GCMRegistrar.checkDevice(this); GCMRegistrar.unregister(this); GCMRegistrar.checkManifest(this); if (GCMRegistrar.isRegistered(this)) { GCMRegistrar.getRegistrationId(this)); } regId = GCMRegistrar.getRegistrationId(this); l.setText(regId); if (regId.equals("")) { GCMRegistrar.register(this,"187805647345"); GCMRegistrar.getRegistrationId(this)); l.setText(regId); } else { GCMRegistrar.getRegistrationId(this)); } Toast.makeText(RegisterHalf.this,""+regId,2000).show();
运行应用程序时,我得到设备ID = null
但是当我第二次运行时,设备ID有一个值.
请告诉我为什么会这样.
解决方法
你必须从sdk导入谷歌播放服务项目到你的工作区并添加
它作为你的项目的lib.然后按照以下步骤:
它作为你的项目的lib.然后按照以下步骤:
1).//declare global private GoogleCloudMessaging _gcm; String _devideId; 2). then execute a new thread like this: private class GetDeviceID extends AsyncTask<String,String,String>{ @Override protected void onPreExecute() { // progress bar super.onPreExecute(); } @Override protected String doInBackground(String... params) { if (_gcm == null) { _gcm = GoogleCloudMessaging.getInstance(CompanyRegistration.this); } try { _devideId= _gcm.register("your project number of 12 digit"); System.out.println("my id is\n" + _devideId+ _devideId.length()); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { //dismiss dialouge here } } 3). in _devideId String you get the device id. 4).modify your manifest file as <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="com.google.android.c2dm.permission.SEND" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
//在应用程序标签中添加您的收件人
<receiver android:name="your package name.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="your package name" /> </intent-filter> </receiver>
//广播接收班
import android.app.Activity; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.media.RingtoneManager; import android.support.v4.app.NotificationCompat; import android.util.Log; import com.google.android.gms.gcm.GoogleCloudMessaging; public class GcmBroadcastReceiver extends BroadcastReceiver { static final String TAG = "GCMDemo"; public static final int NOTIFICATION_ID = 1; private NotificationManager mNotificationManager; NotificationCompat.Builder builder; Context ctx; private SharedPreferences prefs; Boolean alert = true; @Override public void onReceive(Context context,Intent intent) { prefs = context.getSharedPreferences( GcmBroadcastReceiver.class.getSimpleName(),context.MODE_PRIVATE); // changes here GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context); ctx = context; String messageType = gcm.getMessageType(intent); System.out.println("reciever is" + messageType); if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) { sendNotification("Send error: " + intent.getExtras().toString()); } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED .equals(messageType)) { sendNotification("Deleted messages on server: " + intent.getExtras().toString()); } else { Log.i("aaaaaa",intent.getExtras().toString()); sendNotification(intent.getExtras().getString("message").toString()); } setResultCode(Activity.RESULT_OK); } private void sendNotification(String msg) { mNotificationManager = (NotificationManager) ctx .getSystemService(Context.NOTIFICATION_SERVICE); PendingIntent contentIntent = PendingIntent.getActivity(ctx,new Intent(ctx,GcmBroadcastReceiver.class),0); // changes here NotificationCompat.Builder mBuilder = new NotificationCompat.Builder( ctx).setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Come Fetch Me Notification ") .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) .setContentText(msg); mBuilder.setContentIntent(contentIntent); mBuilder.setSound(RingtoneManager .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); mNotificationManager.notify(NOTIFICATION_ID,mBuilder.build()); } }