2013-07-05 3 views
1

Для того, чтобы иметь Widget, нам необходимо поддерживать XML-файл (AppWidgetProviderInfo), который описывает свойства виджета, например. размер или с фиксированной частотой обновления, как это:Постоянная частота обновления виджета Android

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minWidth="160dp" 
    android:minHeight="72dp" 
    android:initialLayout="@layout/widget_layout" 
    android:updatePeriodMillis="1800000" 
    android:configure="android.project.WidgetConfigure" > 

</appwidget-provider> 

и сохранить конфигурацию приложения виджетов в AndroidManifest.xml.

<meta-data 
     android:name="android.appwidget.provider" 
     android:resource="@xml/widget_info" /> 
</receiver> 

Я знаю, что мы не можем редактировать updatePeriodMillis. программно, и нам нужно использовать AlarmManager. (Android Widget set android:updatePeriodMillis programmatically)

Но как я могу программным образом прочитать это значение из xml-файла. Там в любом случае ?

Addenda:

try { 
     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext()); 
     AppWidgetProviderInfo info = appWidgetManager.getAppWidgetInfo(R.xml.widget_info); 
     System.out.println("Time: " + info.updatePeriodMillis); 
    } catch(Exception err) { 
     err.printStackTrace(); 
    } 

Если я использую этот код в деятельности, он возвращает NullPointerException в улове.

ответ

1

updatePeriodMillis - это значение, которое система использует для того, чтобы отправить вам правильное вещание, как только наступит время этого периода. Зачем вы хотите прочитать его и запустить замысел AlarmManager в одно и то же время?

После вашего редактирования: Вы передаёте неправильный идентификатор «id»; вы должны передать действительный идентификатор виджета, а не его идентификатор метаданных XML. Как я писал в своем последнем комментарии, попробуйте это: AppWidgetManager.getInstance(), а затем использовать AppWidgetManager.getAppWidgetIds() получить виджет (ы) идентификатор, а затем продолжить, как описано (AppWidgetManager.getAppWidgetInfo() ...)

+0

Я не хочу, чтобы сделать это. Это предложение было всего лишь информацией со ссылкой, но я хотел посмотреть, как ее прочитать. – Ali

+0

О, я вижу. Существует более одного способа сделать это, но вы считаете, просто прочитали файл и проанализировали его? Посмотрите здесь: http://stackoverflow.com/questions/4329308/open-xml-file-from-res-xml-in-android – avimak

+0

Это означает, что мне нужно проанализировать XML-файл и нет более простого кода , это то, что вы имели в виду? – Ali

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