屏幕接收器广播不工作
Screen Receiver Broadcast not working
我想在 android 中关闭屏幕时接收广播。我写了下面的代码。这是接收者的代码。
@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);
}
请让我知道可能是什么问题。我已经研究了很长时间了。前两天都浪费在这上面了。似乎没有任何效果。
我认为你把这个复杂化了。
这是您
需要的 activity
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;
}
}
这是广播接收器
public class ScreenOffReceiver extends BroadcastReceiver {
public ScreenOffReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Log.i("APP", "EVENT occured");
}
}
我刚刚试用了这段代码,日志记录工作正常。
当您通过服务启动它,并在 onStartCommand() 方法中启动一个新线程来完成工作时,请注意,每次您调用 [=25= 的 onCreate() 时线程都会启动].
希望对您有所帮助
我想在 android 中关闭屏幕时接收广播。我写了下面的代码。这是接收者的代码。
@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);
}
请让我知道可能是什么问题。我已经研究了很长时间了。前两天都浪费在这上面了。似乎没有任何效果。
我认为你把这个复杂化了。 这是您
需要的 activitypublic 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;
}
}
这是广播接收器
public class ScreenOffReceiver extends BroadcastReceiver {
public ScreenOffReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Log.i("APP", "EVENT occured");
}
}
我刚刚试用了这段代码,日志记录工作正常。
当您通过服务启动它,并在 onStartCommand() 方法中启动一个新线程来完成工作时,请注意,每次您调用 [=25= 的 onCreate() 时线程都会启动].
希望对您有所帮助