Android Studio GCM 注册 id 显示为空
Posted
技术标签:
【中文标题】Android Studio GCM 注册 id 显示为空【英文标题】:Android Studio GCM Registration id shows null 【发布时间】:2015-08-14 04:44:01 【问题描述】:创建项目并从https://developers.google.com/cloud-messaging/android/start获取服务器api密钥和发件人ID。并使用以下代码生成注册ID
GoogleCloudMessaging gcm;
String SENDER_ID = "mysenderid";
String Reg_id;
Context context;
EditText firstNumber;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Reg_id=registerGCM();
public String registerGCM()
String regid=null;
try
firstNumber = (EditText)findViewById(R.id.regisid_1);
context = getApplicationContext();
gcm = GoogleCloudMessaging.getInstance(context);
regid = gcm.register(SENDER_ID);
firstNumber.setText(regid);
catch(Exception ae)
return regid;
但执行代码后,regid 显示为空。
【问题讨论】:
可能有异常。尝试在你的 catch 块中打印异常堆栈跟踪.. result = String@3816 "java.io.IOException: MAIN_THREAD" count = 32 hashCode = 0 offset = 0 value = char[41]@3817 shadow$_klass_ = Class@第3428章它的节目是这样的 通过查看您的代码,我认为它是NetworkOnMainThreadException
。请通过编辑您的问题发布完整的logcat
其实我只添加了这些代码。在设计中单独添加了一个 EditText 来显示注册 ID。使用安卓模拟器。我必须连接手机吗?
先阅读本文developers.google.com/cloud-messaging/android/client
【参考方案1】:
如果 gcm id 为 null,请尝试启动后台任务并获取 id。检查以下代码
private void registerInBackground()
new AsyncTask()
@Override
protected String doInBackground(Object[] params)
String msg = "";
try
if (gcm == null)
gcm = GoogleCloudMessaging.getInstance(context);
regid = gcm.register(SENDER_ID);
msg = "Device registered, registration ID=" + regid;
sendRegistrationIdToBackend();
// Persist the regID - no need to register again.
storeRegistrationId(context, regid);
catch (IOException ex)
msg = "Error :" + ex.getMessage();
return msg;
@Override
protected void onPostExecute(Object msg)
// mDisplay.append(msg + "\n");
.execute(null, null, null);
【讨论】:
谢谢,但如何在 MainActivity onCreate 中调用它? 从你的 oncreate 调用这个方法--- registerInBackground()以上是关于Android Studio GCM 注册 id 显示为空的主要内容,如果未能解决你的问题,请参考以下文章
为啥 GCM 会为某些 android 设备返回空的注册 ID?