11.6.2. 为UpdaterService应用权限机制

优质
小牛编辑
134浏览
2023-12-01

11.6.2.为UpdaterService应用权限机制

UpdaterService会在每次收到新数据时广播一条Intent,但我们不希望任何人都可以收到这条Intent,因此限制只有拥有授权的Receiver才可以收到这条Intent。

例 11.12. UpdaterService中的内部类Updater

...

private class Updater extends Thread {

static final String RECEIVE_TIMELINE_NOTIFICATIONS =

"com.marakana.yamba.RECEIVE_TIMELINE_NOTIFICATIONS"; //

Intent intent;

public Updater() {

super("UpdaterService-Updater");

}

@Override

public void run() {

UpdaterService updaterService = UpdaterService.this;

while (updaterService.runFlag) {

Log.d(TAG, "Running background thread");

try {

YambaApplication yamba = (YambaApplication) updaterService

.getApplication();

int newUpdates = yamba.fetchStatusUpdates();

if (newUpdates > 0) {

Log.d(TAG, "We have a new status");

intent = new Intent(NEW_STATUS_INTENT);

intent.putExtra(NEW_STATUS_EXTRA_COUNT, newUpdates);

updaterService.sendBroadcast(intent, RECEIVE_TIMELINE_NOTIFICATIONS); //

}

Thread.sleep(DELAY);

} catch (InterruptedException e) {

updaterService.runFlag = false;

}

}

}

} // Updater

...

  1. 要求Receiver拥有的权限的名字。它必须要与Manifest文件中的定义保持一致。
  2. 将权限的名字作为sendBroadcast()调用的第二个参数。如果Receiver没有相应的权限,就不会收到这条广播。

要保证发送端的安全,我们不需要对 TimelineReceiver 做任何改动。因为用户已经赋予相应的权限,所以能够正确的获取通知。 但是对于接收端,同样应该确保发送者是我们认可的。