2016-12-28 7 views
0

Я хочу получить широкий листинг, когда экран отключен в android. Я написал следующий код. Это код получателя.Экранный приемник Broadcast не работает

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

    helper = new FeedReaderDBHelper(context); 
    if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
     System.out.println("Screen Off Receiver just received something"); 
     if(helper.getValue(FeedReaderContract.FeedEntry.onlock).equals("YES")) 
     { 

      helper.lockAll(); 
      wasScreenOn = false; 
     } 
     else if(helper.getValue(FeedReaderContract.FeedEntry.onLock3).equals("YES")) 
     { 
      System.out.println("Running 3 minutes thread"); 
      Runner runner = new Runner(context); 
      Thread t = new Thread(runner); 
      t.setName("LockThreeThread"); 

      t.start(); 
     } 
    } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
     // and do whatever you need to do here 
     wasScreenOn = true; 
    } 
} 

Я регистрирую и отменяю регистрацию получателя в Службе. Код выглядит следующим образом.

приемник в РЕГИСТРАЦИЯ onStartCommand методом

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    isScreenOn = pm.isScreenOn(); 
    RegisterReceiver(); 
    //Toast.makeText(getApplicationContext(), "Service Started", Toast.LENGTH_SHORT).show(); 
    //System.out.println("StartRemove"); 
    helper = new FeedReaderDBHelper(this); 
    names = helper.getNames(); 
    Thread t = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      startChecker(); 
     } 
    }); 
    t.start(); 

    return START_STICKY; 
} 

И это, как я разрегистрировать в OnDestroy метода обслуживания.

private void RegisterReceiver() 
{ 
    receiver = Factory.getScreeReceiver(); 
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); 
    filter.addAction(Intent.ACTION_SCREEN_ON); 
    registerReceiver(receiver, filter); 
} 

Пожалуйста, дайте мне знать, что может быть проблемой. Я долго врывался в нее. Последние два дня были потрачены впустую на это. Ничто не работает.

+0

Используйте цвет фона с альфа –

+0

Где вы начинающей услугу от? Является ли Activity, запуск которой начинается с начала запуска? –

+0

@TharakaDevinda Я запускаю услугу из основного вида деятельности и да работает и работает сервис. –

ответ

0

Я думаю, что вы слишком усложняете это. Это деятельность вам нужно будет

public class MainActivity extends AppCompatActivity { 

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

    Intent startServiceIntent = new Intent(this, MyService.class); 
    startService(startServiceIntent); 

} 

Это услуга

public class MyService extends Service { 
public MyService() { 
} 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO: Return the communication channel to the service. 
    throw new UnsupportedOperationException("Not yet implemented"); 
} 


@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.i("APP", "Service started"); 
    ScreenOffReceiver receiver = new ScreenOffReceiver(); 
    registerReceiver(receiver, new IntentFilter(Intent.ACTION_SCREEN_OFF)); 

    return START_STICKY; 
} 
} 

И это Broadcast Receiver

public class ScreenOffReceiver extends BroadcastReceiver { 
    public ScreenOffReceiver() { 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i("APP", "EVENT occured"); 
    } 
} 

Я просто попробовал этот код и лесозаготовительной работал отлично ,

Когда вы запускаете это через службу и запускаете новый поток для выполнения задания в методе onStartCommand(), обратите внимание, что поток будет запускаться каждый раз при вызове функции onCreate().

Надеется, что это помогает

+0

Спасибо, он работает сейчас. В чем была проблема? Я не понимаю, почему возникла проблема? Если бы вы могли вести меня. –

+0

Я думаю, что фабрика, которую вы закодировали, что-то сделала с ней. Во всяком случае, простое хранение вещей упрощает работу. И ты же рад. –

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