gpt4 book ai didi

android - 无法使用 GCMRegister 获取注册 ID

转载 作者:行者123 更新时间:2023-11-30 02:53:17 25 4
gpt4 key购买 nike

以下代码不完整。但仅包含可能有助于查找错误的相关代码部分。如果需要额外的代码部分,请通知。

我的 AndroidManifest.xml 内容如下

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

<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="16" tools:ignore="OldTargetApi"/>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.priteshvikram.mywhatsapp.permission.C2D_MESSAGE" />
<permission android:name="com.priteshvikram.mywhatsapp.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.priteshvikram.mywhatsapp.permission.C2D_MESSAGE" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data android:name="com.google.android.gms.version"
android:value="4323030" />
<activity
android:name="com.priteshvikram.mywhatsapp.Login"
android:label="@string/title_activity_login"
android:windowSoftInputMode="adjustResize|stateVisible" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.priteshvikram.mywhatsapp.Home"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:theme="@style/FullscreenTheme" >
</activity>
<activity
android:name="com.priteshvikram.mywhatsapp.ListItemDetails"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/Details"
android:theme="@style/FullscreenTheme" >
</activity>
<activity
android:name="com.priteshvikram.mywhatsapp.Chat"
android:label="@string/title_activity_chat_window"
android:theme="@style/FullscreenTheme" >
</activity>
<receiver
android:name=".BroadcastReceiver"
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" />
<action android:name="com.google.android.gcm.intent.RETRY" />
<category android:name="com.priteshvikram.mywhatsapp" />
</intent-filter>
</receiver>
<service android:name=".GcmIntentService" />
</application>

</manifest>

我的Login.java文件如下

    package com.priteshvikram.mywhatsapp;

public class Login extends Activity {

String SENDER_ID = "XXXXXXXXXXXX";

...

GoogleCloudMessaging gcm;
SharedPreferences prefs;
String regid;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_login);

context = getApplicationContext();

gcm = GoogleCloudMessaging.getInstance(this);
regid = getRegistrationId(context);

if (regid.isEmpty()) {
registerInBackground();
Log.d("empty"," executing");
}
}

private String getRegistrationId(Context context) {
final SharedPreferences prefs = getGCMPreferences(context);
String registrationId = prefs.getString(PROPERTY_REG_ID, "");
if (registrationId.isEmpty()) {
Log.i("gcm", "Registration not found.");
return "";
}
// Check if app was updated; if so, it must clear the registration ID
// since the existing regID is not guaranteed to work with the new
// app version.
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
int currentVersion = getAppVersion(context);
if (registeredVersion != currentVersion) {
Log.i("gcm", "App version changed.");
return "";
}
return registrationId;
}

private void registerInBackground() {
Log.d("registerinbackground"," executing");
new AsyncTask() {
@Override
protected String doInBackground(Object... params) {
String msg = "";
//try {
if (gcm == null) {
Log.d("async task"," executing");
gcm = GoogleCloudMessaging.getInstance(context);
}
//regid = gcm.register(SENDER_ID);
GCMRegistrar.register(context, SENDER_ID);
regid = GCMRegistrar.getRegistrationId(context);
//regid="1";
//Toast.makeText(getApplicationContext(), "User Registered", Toast.LENGTH_SHORT).show();
msg = "Device registered, registration ID=" + regid;
Log.d("regid","executing");

// You should send the registration ID to your server over HTTP,
// so it can use GCM/HTTP or CCS to send messages to your app.
// The request to your server should be authenticated if your app
// is using accounts.
sendRegistrationIdToBackend();
// For this demo: we don't need to send it because the device
// will send upstream messages to a server that echo back the
// message using the 'from' address in the message.

// Persist the regID - no need to register again.
storeRegistrationId(context, regid);
//} catch (IOException ex) {
//msg = "Error :" + ex.getMessage();
// If there is an error, don't just keep trying to register.
// Require the user to click a button again, or perform
// exponential back-off.
Log.d("error",msg);
//Toast.makeText(getApplicationContext(), "Unable to register", Toast.LENGTH_SHORT).show();
//}
return msg;
}
}.execute();
}

private void sendRegistrationIdToBackend() {
new SendRegId().execute();
}

private void storeRegistrationId(Context context, String regId) {
final SharedPreferences prefs = getGCMPreferences(context);
int appVersion = getAppVersion(context);
Log.i("gcs", "Saving regId on app version " + appVersion);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(PROPERTY_REG_ID, regId);
editor.putInt(PROPERTY_APP_VERSION, appVersion);
editor.commit();
}

public class SendRegId extends AsyncTask<Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {

try {
return downloadUrl(regid);
} catch (IOException e) {
return false;
}
}

private Boolean downloadUrl(String reg) throws IOException {
final String DEBUG_TAG = "XMLData";
InputStream is = null;
// Only display the first 500 characters of the retrieved
// web page content.
int len = 500;
String urlParameters="regid="+reg+"&email="+mEmail;
try {
URL url = new URL("https://priteshvikram-dawud.rhcloud.com/gcm_reg_store.php");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setInstanceFollowRedirects(false);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("charset", "utf-8");
conn.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
conn.setUseCaches (false);
// Starts the query
DataOutputStream wr = new DataOutputStream(conn.getOutputStream ());
wr.writeBytes(urlParameters);
wr.flush();

int response = conn.getResponseCode();
Log.d(DEBUG_TAG, "gcm_reg_store.php response is: " + response);
is = conn.getInputStream();

// Convert the InputStream into a string
String contentAsString = readIt(is, len).replaceFirst("\\s+$", "");
//Integer.parseInt(contentAsString);
Log.d("data",contentAsString);
return true;

// Makes sure that the InputStream is closed after the app is
// finished using it.
} finally {
if (is != null) {
is.close();
}
}
}
public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {
BufferedReader reader = null;
reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
String buffer;
buffer = reader.readLine();
return buffer;
}

@Override
protected void onPostExecute(final Boolean success) {
}
}

最佳答案

您将旧的注册方式与新的注册方式混合在一起。在新方法中,您根本不使用 GCMRegistrar(该类已弃用)。您调用 gcm.register(SENDER_ID)

    private void registerInBackground() {
Log.d("registerinbackground"," executing");
new AsyncTask() {
@Override
protected String doInBackground(Object... params) {
String msg = "";
//try {
if (gcm == null) {
Log.d("async task"," executing");
gcm = GoogleCloudMessaging.getInstance(context);
}
regid = gcm.register(SENDER_ID);

GCMRegistrar 异步注册,这就是 GCMRegistrar.getRegistrationId(context) 返回 null 的原因。在后台运行registerInBackground() 的全部意义在于调用返回注册 ID 的阻塞注册方法(gcm.register(SENDER_ID) 所做的)。

关于android - 无法使用 GCMRegister 获取注册 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23753730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com