2018-07-10面试经历滑铁卢整理面试笔记

2018-07-11  本文已影响0人  空老表

在manifest里面注册开机启动的广播

<receiver android:name=".AutoStartReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <category android:name="android.intent.category.HOME"/>
        </intent-filter>
    </receiver>

新建一个类AutoStartReceiver,用于接收开机启动的广播,并且启动自身的activity

public class AutoStartReceiver extends BroadcastReceiver {
      @Override
      public void onReceive(Context context, Intent intent) {
          Intent i = new Intent(context, MainActivity.class);
          i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          context.startActivity(i);
      }
}

最后重要的一部:打开手机的自启动权限,不然接收不到广播

动态注册屏幕熄灭都点亮的广播

class MainActivity : AppCompatActivity() {

var receiver: ScreenBroadcastReceiver? = null


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    receiver = ScreenBroadcastReceiver()

    val filter = IntentFilter()
    filter.addAction(Intent.ACTION_SCREEN_ON)
    filter.addAction(Intent.ACTION_SCREEN_OFF)
    filter.addAction(Intent.ACTION_USER_PRESENT)
    registerReceiver(receiver, filter)

}
override fun onDestroy() {
    super.onDestroy()
    unregisterReceiver(receiver!!)
}
  }

编写收到广播后要执行的操作

public class ScreenBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "ScreenBroadcastReceiver";

@Override
public void onReceive(Context context, Intent intent) {
    Log.d(TAG, "onReceive");
    String action = intent.getAction();

    if (Intent.ACTION_SCREEN_ON.equals(action)) {
        Log.d(TAG, "screen on");
    } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
        Log.d(TAG, "screen off");
    } else if (Intent.ACTION_USER_PRESENT.equals(action)) {
        Log.d(TAG, "screen unlock");
    }
}
}
上一篇下一篇

猜你喜欢

热点阅读