2015-05-13 3 views
4

У меня возникла проблема, когда при изменении времени TIME_TICK вызывается только при запуске приложения. Но я хочу, чтобы его вызывали, даже когда приложение работает или не использует широковещательные приемники.TIME_TICK не вызывается при изменении минут

Главная Деятельность

public class MainActivity extends Activity { 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toast.makeText(getApplicationContext(), "Checking", Toast.LENGTH_LONG).show(); 
     } 
    } 

MyBroadastReceivers

public class MyBroadastReceiversextends BroadcastReceiver 
{ 

    @Override 
    public void onReceive(Context arg0, Intent arg1) { 

     Toast.makeText(arg0, "Toast Receive", Toast.LENGTH_LONG).show(); 
    } 
} 

Menifest Файл

<receiver android:name="com.example.serviceschecking.MyBroadastReceivers" android:enabled="true" android:exported="true"> 
     <intent-filter > 
      <action android:name="android.intent.action.TIME_TICK"/> 
     </intent-filter> 
</receiver> 

ответ

3

Как описано в API. Вам необходимо зарегистрировать это намерение программно:

Трансляция Действие: Текущее время изменилось. Отправляется каждую минуту. Вы не можете получить это через компоненты, объявленные в манифесте, только на , явно регистрируясь для него с помощью Context.registerReceiver().

Вы должны зарегистрировать его, например, в вашем mainActivity:

 IntentFilter mTime = new IntentFilter(Intent.ACTION_TIME_TICK); 
     registerReceiver(YourReceiver, mTime); 
2

Согласно Android documentation:

«Вы не можете получить это через компоненту, объявленную в манифестах, только явно регистрации для это с Context.registerReceiver() ".

Глядя на ваш код, что-то вроде:

public class MainActivity extends Activity { 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toast.makeText(getApplicationContext(), "Checking", Toast.LENGTH_LONG).show(); 

     receiver = new MyBroadastReceivers(); 
     registerReceiver(receiver, new IntentFilter(Intent.ACTION_TIME_TICK)); 
     } 

     @Override 
     protected void onDestroy() { 
     // Unregister MyBroadastReceivers 
     unregisterReceiver(receiver); 
     } 
    } 

Plus, в зависимости от того, что вы хотите сделать, AlarmManager может быть хорошей альтернативой «особенно если вы позволить пользователю настроить частоту опроса». Пожалуйста, ознакомьтесь с этим SO thread.

0

PErfact Пример я испытал и работал perfactly

package com.sifat.githubalarmapp; 
 

 
import android.content.BroadcastReceiver; 
 
import android.content.Context; 
 
import android.content.Intent; 
 
import android.widget.Toast; 
 

 

 
public class AlarmReceiver extends BroadcastReceiver { 
 

 
    @Override 
 
    public void onReceive(Context context, Intent intent) { 
 

 
     Toast.makeText(context, "I am running sifat", Toast.LENGTH_LONG).show(); 
 
    } 
 
}

package com.sifat.githubalarmapp; 
 

 
import android.support.v7.app.AppCompatActivity; 
 
import android.os.Bundle; 
 

 
public class MyActivity extends AppCompatActivity { 
 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_my); 
 

 
    } 
 

 

 

 
}

Добавить в очевидном

<!-- Will not be called unless the application explicitly enables it --> 
 
     <receiver android:name=".AlarmReceiver" 
 
      android:enabled="true"> 
 
      <intent-filter> 
 
       <action android:name="android.intent.action.ACTION_TIME_TICK"/> 
 
      </intent-filter> 
 
     </receiver>

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