0

Я пытаюсь настроить GCM, чтобы разрешить push-уведомления. Как настроить мой Register.class, чтобы выполнить все действия в фоновом режиме во время запуска приложения?Настройка GCM для регистрации приложения во время запуска приложения

GoogleCloudMessaging gcm; 
    Context context; 
    String regId; 

    public static final String REG_ID = "regId"; 
    private static final String APP_VERSION = "appVersion"; 

    static final String TAG = "Register Activity"; 

    public String registerGCM() { 

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

     if (TextUtils.isEmpty(regId)) { 

      registerInBackground(); 

      Log.d("RegisterActivity", 
        "registerGCM - successfully registered with GCM server - regId: " 
          + regId); 
     } else { 
      Toast.makeText(getApplicationContext(), 
        "RegId already available. RegId: " + regId, 
        Toast.LENGTH_LONG).show(); 
     } 
     return regId; 
    } 

    private String getRegistrationId(Context context) { 
     final SharedPreferences prefs = getSharedPreferences(
       MainActivity.class.getSimpleName(), Context.MODE_PRIVATE); 
     String registrationId = prefs.getString(REG_ID, ""); 
     if (registrationId.isEmpty()) { 
      Log.i(TAG, "Registration not found."); 
      return ""; 
     } 
     int registeredVersion = prefs.getInt(APP_VERSION, Integer.MIN_VALUE); 
     int currentVersion = getAppVersion(context); 
     if (registeredVersion != currentVersion) { 
      Log.i(TAG, "App version changed."); 
      return ""; 
     } 
     return registrationId; 
    } 

    private static int getAppVersion(Context context) { 
     try { 
      PackageInfo packageInfo = context.getPackageManager() 
        .getPackageInfo(context.getPackageName(), 0); 
      return packageInfo.versionCode; 
     } catch (NameNotFoundException e) { 
      Log.d("RegisterActivity", 
        "I never expected this! Going down, going down!" + e); 
      throw new RuntimeException(e); 
     } 
    } 

    private void registerInBackground() { 
     new AsyncTask<Void, Void, String>() { 
      @Override 
      protected String doInBackground(Void... params) { 
       String msg = ""; 
       try { 
        if (gcm == null) { 
         gcm = GoogleCloudMessaging.getInstance(context); 
        } 
        regId = gcm.register(Config.GOOGLE_PROJECT_NUMBER); 
        Log.d("RegisterActivity", "registerInBackground - regId: " 
          + regId); 
        msg = "Device registered, registration ID=" + regId; 

        storeRegistrationId(context, regId); 
       } catch (IOException ex) { 
        msg = "Error :" + ex.getMessage(); 
        Log.d("RegisterActivity", "Error: " + msg); 
       } 
       Log.d("RegisterActivity", "AsyncTask completed: " + msg); 
       return msg; 
      } 

      @Override 
      protected void onPostExecute(String msg) { 
       Toast.makeText(getApplicationContext(), 
         "Registered with GCM Server." + msg, Toast.LENGTH_LONG) 
         .show(); 
      } 
     }.execute(null, null, null); 
    } 

    private void storeRegistrationId(Context context, String regId) { 
     final SharedPreferences prefs = getSharedPreferences(
       MainActivity.class.getSimpleName(), Context.MODE_PRIVATE); 
     int appVersion = getAppVersion(context); 
     Log.i(TAG, "Saving regId on app version " + appVersion); 
     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putString(REG_ID, regId); 
     editor.putInt(APP_VERSION, appVersion); 
     editor.commit(); 
    } 
+0

Единственный способ блокировки здесь - это 'registerInBackground', у которого уже есть AsyncTask внутри него для выполнения задач в фоновом потоке. Все, что вам нужно сделать, это вызвать 'registerGCM' в onCreate(). – Koh

ответ

1

Если вы называете Register.class в своем классе приложений,

public class DemoApp extends Application { 

    public void onCreate() { 
    super.onCreate(); 

    // call your Register.class 
    } 
} 

и не забудьте отредактировать Manifest.xml (имя приложения тег)

<application 
     android:name=".DemoApp" 

    <!-- rest of application --> 

Надеюсь, это поможет,

Cheers

+0

Приношу свои извинения, пожалуйста, отклоните мои изменения, вы являетесь автором – Sauron

+0

Итак, я ответил на ваш вопрос? @Sauron – letz

+0

Да, я перепутал свои типы классов и пел статические методы, которые мне не нужны. удалил все это и остался основным для того, что вы начертили ... Я просто ждал, когда вы отклоните сделанные изменения – Sauron

Смежные вопросы