0

我正在为来电开发自定义 UI。我几乎完成了这个,但现在我只想在屏幕打开并且用户有来电时加载我的自定义 UI 活动。我在 BroadcastReceiver (android.intent.action.PHONE_STATE) 做所有这些事情。那么是否可以从 BrodcastReceiver 获取屏幕开/关状态。

我尝试按照示例http://thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/但从 BroadcastReceiver 注册接收器会给出编译时错误。

请给我建议。

public class MyPhoneReceiver extends BroadcastReceiver {

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


          IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
          filter.addAction(Intent.ACTION_SCREEN_OFF);
          BroadcastReceiver mReceiver = new MyScreenReceiver();
          registerReceiver(mReceiver, filter); //this gives error "The method registerReceiver(BroadcastReceiver, IntentFilter) is undefined for the type MyPhoneReceiver"


     }
}

清单.xml

<receiver android:name="MyPhoneReceiver" >
     <intent-filter>
          <action android:name="android.intent.action.PHONE_STATE"/>
     </intent-filter>
</receiver>

谢谢

4

2 回答 2

1

registerReceiver() 是 Context 的一个方法,所以你应该调用context.registerReceiver(mReceiver, filter);

但您可以执行以下操作:

public class MyPhoneReceiver extends BroadcastReceiver {

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

        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        if(pm.isScreenOn())
        {
            // load your UI
        }

     }
}
于 2012-10-10T11:41:03.420 回答
0

这是您的问题的解决方案..

public static boolean wasScreenOn = true;

@Override
public void onReceive(Context context, Intent intent) {
   if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
        // DO WHATEVER YOU NEED TO DO HERE
        wasScreenOn = false;
    } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
        // AND DO WHATEVER YOU NEED TO DO HERE
        wasScreenOn = true;
    }

}
于 2012-10-10T10:38:43.493 回答