Как инициализировать идентификатор отправителя для Android C2DM без использования жестко закодированного значения в статической переменной? - PullRequest
3 голосов
/ 19 октября 2010

Я добавляю Android C2DM в проект библиотеки Android. Я начал с com.google.android.c2dm пакета , который входит в JumpNote и Chrome To Phone . Чтобы использовать этот пакет, вы должны создать подкласс службы C2DMBaseReceiver , которая принимает идентификатор отправителя в качестве аргумента своего конструктора. В JumpNote этот аргумент инициализируется с использованием жестко закодированной статической переменной в классе конфигурации. Однако в проекте библиотеки Android, который может использоваться несколькими одновременно запущенными приложениями, я не думаю, что могу использовать жестко закодированную статическую переменную (то есть, я считаю, что это может привести к проблемам, когда / если несколько приложений пытаются доступ / изменение статической переменной).

Я попытался придумать способ инициализации идентификатора отправителя, не используя статическую переменную, и до сих пор в тупике.

Очевидным решением будет использование строки Manifest или Resource или комбинации из 2. Например, в strings.xml у меня может быть строка «ac2dmSender», доступ к которой осуществляется в дочернем элементе метаданных Объявление службы C2DMReceiver в манифесте. Однако кажется, что вы не можете получить ссылку на PackageManager или ResourceManager из статического контекста, поэтому у меня нет способа затем извлечь метаданные таким образом, чтобы передать их конструктору C2DMBaseReceiver.

Пожалуйста, дайте мне знать, что я что-то упустил! Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 31 января 2011

У нас была такая же проблема.
Мы решили ее, используя файл свойств в папке assets.Может загружать свойства статически, используя статический вспомогательный класс конфигурации.При первой загрузке приложения можно получить файл свойств с использованием контекста приложения.

, например: 1. init статическая конфигурация public void onCreate (Bundle saveInstanceState) {super.onCreate (saveInstanceState);myConfig = new WLConfig (getApplication ());
}

  1. Затем используйте в классе конфигурации: myProperties.load (context.getAssets (). open ("myclient.properties")));

  2. И получите письмо отправителя: верните myProperties.getProperty (WL_C2DM_SENDER)

1 голос
/ 19 октября 2010

Однако в проекте библиотеки Android, который может использоваться несколькими одновременно запущенными приложениями, я не думаю, что могу использовать жестко закодированную статическую переменную (то есть, я считаю, что это может привести к проблемам, когда / если несколько приложений пытаемся получить доступ / изменить статическую переменную).

Каждое «несколько одновременно работающих приложений» имеет свою собственную копию статической переменной, поскольку каждое выполняется в своем собственном процессе.

...