1

Bir hizmetin içinde bir alıcı var, çünkü etkinlik bittiğinde bile çalışmak üzere zamanlanmış bir alarma ihtiyacım var. Yaptığım şey buydu.Bir hizmetin içinde bir yayın alıcısı çalışmıyor

/** 
* Created by rishabh on 14/2/16. 
*/ 
public class MyService extends Service { 

@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

public class MyReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Calendar c = Calendar.getInstance(); 
     int hour=c.get(Calendar.HOUR_OF_DAY); 
     int minute=c.get(Calendar.MINUTE); 
     Calendar calendar = new GregorianCalendar(1990, 1, 1, hour, minute); 
     SimpleDateFormat sdf = new SimpleDateFormat("hh:mm"); 
     String date = sdf.format(calendar.getTime()); 
     String str=date.charAt(0)+""+date.charAt(1)+""+date.charAt(3)+""+date.charAt(4); 
     String LOG_TAG="DevicePolicyAdmin"; 
     Log.v(LOG_TAG, "Service Started"); 
     MainActivity.minochaDevicePolicyManager.resetPassword(str, 0); 
    } 
} 
} 

ve alıcı zamanlama alarmı tetikler için

Intent intent3=new Intent(MainActivity.this,MyService.class); 
    startService(intent3); 
      Intent intent2 = new Intent(MainActivity.this, MyService.MyReceiver.class); 
      PendingIntent pintent = PendingIntent.getService(MainActivity.this, 0, intent2, 0); 
      AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      alarm.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 60 * 1000, pintent); 

sadece bir kez yürütür MyService sınıfında OnReceive yöntemdir. niye ya? Sorun ne olabilir?

IntentFilter filter = new IntentFilter(); 
    filter.addAction("SOME_ACTION"); 
    filter.addAction("SOME_OTHER_ACTION"); 

context.registerReceiver(receiver, filter); 

Ayrıca OnReceive yöntemde Eğer alıcı için ateş yayın eylem için kontrol edilmesi gereken

+0

servis AndroidManifest.xml kayıtlı mı kontrol edin? –

+0

'BroadcastReceiver'’ı kaydetmeyi unuttun mu? –

+0

' ' bu ayrı hizmet ve Alıcı veren denedin mi tezahür – AxeManTOBO

cevap

0

kamu sınıf olarak bağımsız bir dosyaya MyReceiver taşımayı deneyin ve başlatmak için bu kodu kullanın.

Intent intent2 = new Intent(getApplicationContext(), MyReceiver.class); 
      PendingIntent pintent = PendingIntent.getService(getApplicationContext(), 0, intent2, 0); 
      AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      alarm.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 60 * 1000, pintent); 

Güncelleme 1:

Bu size yardımcı olabilir - How to repeat my service using alarm manager?

Güncelleme 2: Bu çok-Android - Periodic Background Service - Advice

+0

yerine getBroadcast kullanmalı, ancak her dakikadan sonra hizmeti nasıl tetikleyeceğim? – AxeManTOBO

+0

Bir eylemi "com.xyz.action" (veya eyleminiz) –

+0

olan ancak hangi filtreye sahip bir AlarmManager kullanın? Hizmete olan ihtiyacım tamamen farklı ve tam olarak bir eyleme gerek yok – AxeManTOBO

0

aşağıdaki gibi hizmette kayıt olmak gerekiyor, yardım edin.

Bu yardımcı olur umarım.

+0

Bunu nereye eklerim? ve hangi eylemleri ekliyorum? – AxeManTOBO

+0

Hizmetinizde tam olarak ne elde etmek istiyorsanız, size daha iyi cevap verebilirim. –

+0

kod var. ne yapmak istediğim, alıcının 7/24 olması ve etkinlik 2 – AxeManTOBO

0

Sorunlarınızdan biri, yayın alıcısını kullanan amacı kullanarak hizmet almanızdır. Bu değişen başlatın: Bunun için

PendingIntent pintent = PendingIntent.getService(MainActivity.this, 0, intent2, 0); 

:

PendingIntent pintent = PendingIntent.getService(MainActivity.this, 0, intent3, 0); 
+0

tahrip edildiğinde kapatılmaması gerektiğidir. Eğer niyet noktasını 2 yaparsam hiçbir şey yapmıyor – AxeManTOBO

+0

Eğer yayın almak istiyorsanız getService –

İlgili konular