2017-02-26 18 views
0

目標:讓Android自動檢測時區(TZ)在類中的更改並讓MainActivity接收新的TZ。Android TimeZone監聽器/接收器 - 未到達MainActivity

電流:清單是設置,類接收TZ(見下文第2項,表示Log.E新TZ更改TZ後對電話),但MainActivity/onTZChanged未接收到新的TZ和並不是在所有的調用。

問題:如何讓MainActivity從類接收新的TZ?

CODE:

1 - 艙單

<receiver 
    android:name=".TZChangeReceiver" 
    android:enabled="true"> 
    <intent-filter> 
     <action android:name="android.intent.action.TIMEZONE_CHANGED" /> 
    </intent-filter> 
</receiver> 

2 - 類

public class TZChangeReceiver extends BroadcastReceiver { 

    public static TZChangeReceiverListener TZChangeReceiverListener; 
    public TZChangeReceiver() { 
     super(); 
    } 
    @Override 
    public void onReceive(Context context, Intent arg1) { 
     String localTZ = TimeZone.getDefault().getID(); 
     Log.e (" tzchg ", " got it " + localTZ); 
     if (TZChangeReceiverListener != null) { 
      TZChangeReceiverListener.onTZChanged(localTZ); 
     } 
    } 
    public static String isConnected() { 
     String tzToken= TimeZone.getDefault().getID(); 
     return tzToken ; 
    } 
    public interface TZChangeReceiverListener { 
     void onTZChanged (String isConnected); 
    } 
} 

3 - MainActivity

public class MainActivity extends AppCompatActivity implements TZChangeReceiver.TZChangeReceiverListener { 

...other code... 

    @Override 
    public void onTZChanged(String isConnected) { 
     isConnected = TZChangeReceiver.isConnected(); 
     Log.e(" TZ", " isConnected " + isConnected); 
    } 

回答

0

我固定它。我錯過下面的MainActivity

MyApplication.getInstance().setTZChangeListener(this); 

,這是在所有MyApplication:

public void setTZChangeListener(TZChangeReceiver.TZChangeReceiverListener listener) { 
//Log.e(geotime + " MyApp: ","SetConnListener"); 
TZChangeReceiver.TZChangeReceiverListener = listener;