Используя wakelock в сервисе Android 1.5

ДРУГОЕ РЕДАКТИРОВАНИЕ

Кори, если у вас установлены предыдущие версии SQL Server (например, 2008), то есть версия sqlcmd, которую вы используете. Для подключения к LocalDb вам необходимо использовать версию SQL Server 2012 sqlcmd. Поэтому ваши инструкции для пользователей должны убедиться, что они используют версию SQL Server 2012, выполнив:

C:\Program Files\Microsoft SQL Server\110\Tools\Binn\sqlcmd -S "(localdb)\.\InstanceName"

Это сработало для меня. Я не проверял, доступен ли этот путь и версия sqlcmd пользователям, у которых только установил sqllocaldb.msi. Извините, но у меня нет свободных компьютеров без установленного SQL Server 2012 (или только с установленными предыдущими версиями), чтобы попробовать это полностью. Но, пожалуйста, дайте мне знать, если явный вызов версии 110 sqlcmd сработает.

Я думаю, что вы также можете проинструктировать пользователей изменять свои системные переменные так, чтобы на первом месте стояла версия 110 (что, IMHO, должно иметь место автоматически).

Один из сотрудников Кшиштофа подтвердил FileTimeToSystemTime как ошибку. Так что до сих пор нет известных мне исправлений для не-владельцев для подключения через sqllocaldb. Но я показал, что и SSMS, и sqlcmd можно заставить работать, поэтому я надеюсь, что это приблизит вас к работе.

РЕДАКТИРОВАТЬ

Вам необходимо добавить в экземпляр любых пользователей, не являющихся владельцами, например, CREATE LOGIN [MyDomain\OtherUser] FROM WINDOWS; и любые соответствующие разрешения. В моем тесте вход в систему не удался и генерировал неправильное сообщение об ошибке (сообщение об ошибке «FileTimeToSystemTime» является ошибкой). Вам также необходимо GRANT CONNECT. Как только вы это сделаете, вы сможете подключиться от второго пользователя, используя Management Studio с этим соединением (единственным, которое я пробовал):

(localdb)\.\MySharedInstance

Но из sqlcmd, Я по-прежнему получаю сообщение об ошибке, независимо от того, как я пытаюсь подключиться:

sqlcmd -S "(localdb)\.\MySharedInstance"
sqlcmd -S ".\MySharedInstance"
sqlcmd -S "(localdb)\MySharedInstance"
sqlcmd -S "GREENHORNET\MySharedInstance"
sqlcmd -S ".\LOCALDB#SH04FF8A"
sqlcmd -S "GREENHORNET\LOCALDB#SH04FF8A"

Весь выход:

HResult 0xFFFFFFFF, Уровень 16, Состояние 1 Сетевые интерфейсы SQL Server:

Ошибка при поиске указанного сервера / экземпляра [xFFFFFFFF].

Sqlcmd: Ошибка: собственный клиент Microsoft SQL Server 10.0: при установлении соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром. Сервер не найден или недоступен. Проверьте, правильно ли указано имя экземпляра и настроен ли SQL Server для разрешения удаленных подключений. Для получения дополнительной информации см. Электронную документацию по SQL Server.

Sqlcmd: ошибка: собственный клиент Microsoft SQL Server 10.0: истекло время ожидания входа.

Хотя я проверил, что экземпляр настроен на прием удаленных соединений. Итак, есть еще один обруч, через который должен пройти sqlcmd.

А что касается sqllocaldb exe, как это следует какой-либо логике? Я могу видеть, что экземпляр есть через info, я получаю правильное сообщение об ошибке, когда пытаюсь остановить его, я получаю сообщение, что он [уже] запущен, когда я пытаюсь запустить его, но я не могу подключиться к это?

enter image description here

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


Что касается обновления 4.0.2, из http://connect.microsoft.com/SQLServer/feedback/details/723737/smo-cant-connect-to-localdb-instances :

Мы приняли явное решение не включать .NET Framework 4.0.2 в установщик LocalDB. Установка обновления .NET Framework увеличит размер установщика LocalDB и приведет к вероятной перезагрузке. Поскольку LocalDB построен независимо от .NET, мы не думали, что мы должны брать эту стоимость за каждую установку LocalDB. Будущие версии .NET (включая .NET 4.5, теперь в CTP) будут поддерживать LocalDB из коробки. Некоторые разработчики также могут в будущем выбрать ODBC, PHP Driver / PDO и, возможно, JDBC. Эти разработчики не будут заинтересованы в обновлении .NET.

6
задан MysticMagicϡ 17 January 2013 в 05:32
поделиться

2 ответа

Разве вы не пропустили строку

    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");

в onDestroy ()? Это локальная переменная в onCreate (), но она вообще не объявлена ​​в onDestroy ().

Или, что более вероятно, вы можете захотеть сделать ее полем класса WakeLockService вместо локальной переменной.

5
ответ дан 8 December 2019 в 17:26
поделиться

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

Кроме того, уже слишком поздно приобретать блокировка пробуждения в методе onCreate () . До достижения onCreate () телефон мог уже перейти в спящий режим, когда вы запускаете Службу из-за сигнала тревоги, а не из-за активности, которая находится в фоновом режиме.

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

Кроме того, если вы используете службу, полную блокировку пробуждения скорее всего, это не то, что вы хотите, но частичная блокировка пробуждения. Вам не нужно, чтобы экран оставался включенным, верно?

Извините, но блокировку пробуждения действительно сложно использовать из-за проблем, которые я описал выше. Это определенно сложная тема, и в ней легко ошибиться. Если вы это сделаете, ваше приложение получит очень уродливые комментарии, потому что слишком долгое удержание является серьезным нарушением, поскольку оно разряжает аккумулятор. Не поймите это неправильно, но, учитывая характер проблемы, которую вы здесь разместили (синтаксическая ошибка / ошибка компилятора), я настоятельно рекомендую искать решение без блокировки службы и пробуждения.

9
ответ дан 8 December 2019 в 17:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: