2009-11-29 5 views
11

В классе утилиты Android я хочу получить системное предпочтение в классе, но у меня нет контекста, потому что класс, который его вызывает, не имеет контекст. Я обнаружил, что для Ресурсов можно использовать статическую функцию Resources.getSystem(). Есть ли аналогичный способ получения системных настроек без контекста?Получение системных настроек Android без какого-либо контекста

Мой класс не является деятельностью и не обслуживает. Это класс полезности. При необходимости может предоставить дополнительную информацию.

+0

Из любопытства, я нахожусь в точно такой же ситуации, как вы в настоящее время. Разум проливает немного света на то, что вы в конечном итоге решили? – camperdave

ответ

7

Вы должны отправить это Контекст - не пытайтесь убежать от своих обязанностей. :) Ваш класс утилит должен быть вызван действием или службой на каком-то уровне, и вы пройдете этот Контекст на всем протяжении линии, через каждый вызов метода. Я знаю, что это раздражает, мне пришлось делать подобные вещи сами. Подумайте, что это стимул, чтобы ваш код был прост и требовал как можно меньше вызовов методов, чтобы получить что-то.

+0

Нет, дело не в лень. Я настраиваю весь Android, и этот класс вызывается внутренним классом Android, который не имеет контекста. – Mostafa

+6

Затем настройки не являются тем, что вы хотите использовать для хранения информации. Предпочтения привязаны к приложениям/действиям. Вместо этого храните информацию на диске. – Konklone

+0

Спасибо. Это может помочь. Я должен проверить. – Mostafa

-1

Я использую следующий Hack: http://www.hasemanonmobile.com/2009/10/05/quick-and-very-dirty-android-development-trick/

По сути вы спрячьте от указателя контекста как статической переменной внутри вашей деятельности. Я бы рекомендовал этот уродливый взломать, если вы в сжатые сроки.

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

+0

Подумайте, что там есть ссылка. :) – t0mm13b

-3

Вы можете создать контекст:

Context myContext = createPackageContext("com.example", 0); 
+4

Пожалуйста, добавьте комментарии, когда вы запустите этот ответ. Поэтому мы можем узнать, почему это не очень хорошее решение. – kuester2000

+3

'createPackageContext()' - это нестатический метод для 'Context', поэтому для его вызова нужно иметь' Context'. Его проблема заключается в том, что он не хочет, чтобы вы пропускали объект контекста повсюду, если все, что вы хотите сделать, - это доступ к системным ресурсам. –