пример часового пояса не работает в эмуляторе

1
<receiver android:name=".ExampleBroadCastReceiver" 
    android:enabled="true"> 
    <intent-filter> 
        <action android:name="android.intent.action.ACTION_TIMEZONE_CHANGED"/> 
    </intent-filter> 
</receiver> 
package com.broadcastreceiver;

import java.util.ArrayList;
import android.appwidget.AppWidgetManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class ExampleBroadCastReceiver extends BroadcastReceiver { 
    @Override
    public void onReceive(final Context context, final Intent intent) {
        // TODO Auto-generated method stub

        Log.d("ExmampleBroadcastReceiver", "intent=" + intent); 
        Intent intent1 = new Intent(context,Login.class); 
        context.startActivity(intent1); 
    } 
} 

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

Теги:

3 ответа

3

У меня была такая же проблема, и этот поток помог мне получить обновления TimeZone, однако я все еще не получал уведомлений о изменениях даты и времени. Наконец, я обнаружил, что разница в том, что вы указываете в вашем файле манифеста, и то, что использует ваш широковещательный приемник при фильтрации намерений. Хотя он задокументирован в справочнике Android Intent, его очень легко упустить!

В вашем файле AndroidManifest.xml используйте следующее:

  <receiver android:name=".MyReceiver">
    <intent-filter>
      <!-- NOTE: action.TIME_SET maps to an Intent.TIME_CHANGED broadcast message -->
      <action android:name="android.intent.action.TIME_SET" /> 
      <action android:name="android.intent.action.TIMEZONE_CHANGED" />
      <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
  </receiver>

И в вашем классе приемника:

public class MyReceiver extends BroadcastReceiver {
  private static final String TAG = "MyReceiver";
  private static boolean DEBUG = true;

  @Override
  public void onReceive(Context context, Intent intent) {
    final String PROC = "onReceive";

    if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
        if (DEBUG) { Log.v(TAG, PROC + ": ACTION_BOOT_COMPLETED received"); }
    }
    // NOTE: this was triggered by action.TIME_SET in the manifest file!
    else if (intent.getAction().equals(Intent.ACTION_TIME_CHANGED)) {
      if (DEBUG) { Log.v(TAG, PROC + ": ACTION_TIME_CHANGED received"); }
    }
    else if (intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED)) {
      if (DEBUG) { Log.v(TAG, PROC + ": ACTION_TIMEZONE_CHANGED received"); }
    }
  }

}
1

Он не работал, потому что намерения ошибочны. Замените те, которые указаны выше:

<intent-filter>
    <action android:name="android.intent.action.TIMEZONE_CHANGED" />
    <action android:name="android.intent.action.TIME" />
</intent-filter>

Затем перейдите в область "Настройки" и измените часовой пояс.

  • 0
    Я не думаю, что это правильно ... Я не вижу никаких намерений с именем "android.intent.action.TIME" в документации. Можете ли вы предоставить ссылку?
0

Я думаю, вы не включили следующие строки в свой AndroidManifext.xml, не так ли?

 <receiver android:name=".ExampleBroadcastReceiver" android:enabled="false">
     <intent-filter>
         <action android:name="android.intent.ACTION_TIMEZONE_CHANGED" />
         <action android:name="android.intent.ACTION_TIME" />
     </intent-filter>
 </receiver>
  • 0
    Да, я написал этот код

Ещё вопросы

Сообщество Overcoder
Наверх
Меню