blob: c93e2552e2080c505314e9d675e0a806fe4f5e4d [file] [log] [blame]
page.title=Khi động Trc tiếp
page.keywords=preview,sdk,direct boot
page.tags=androidn
page.image=images/cards/card-nyc_2x.jpg
@jd:body
<div id="tb-wrapper">
<div id="tb">
<h2>Trong tài liu này</h2>
<ol>
<li><a href="#run">Yêu cu Truy cp để Chy trong quá trình Khi động Trc tiếp</a></li>
<li><a href="#access">Truy cp B nh Lưu tr Mã hóa ca Thiết bị</a></li>
<li><a href="#notification">Nhn thông báo M khóa ca Người dùng</a></li>
<li><a href="#migrating">Chuyn nhp D liu Có sn</a></li>
<li><a href="#testing">Kim th ng dng Nhn biết Mã hóa ca bn</a></li>
</ol>
</div>
</div>
<p>Android N chy trong chế độ <i>Khi động Trc tiếp</i> an toàn
khi thiết b đã được bt ngun nhưng người dùng chưa m khóa
thiết bị. Để h tr chế độ này, h thng cung cp hai v trí lưu tr d liu:</p>
<ul>
<li><i>Lưu tr mã hóa thông tin xác thc</i>, là v trí lưu tr mc định
và ch kh dng sau khi người dùng đã m khóa thiết bị.</li>
<li><i>Lưu tr mã hóa thiết bị</i>, là v trí lưu tr kh dng cho c
chế độ Khi động Trc tiếp và sau khi người dùng đã m khóa thiết bị.</li>
</ul>
<p>Theo mc định, các ng dng không chy trong quá trình chế độ Khi động Trc tiếp.
Nếu ng dng ca bn cn thc hin hành động trong chế độ Khi động Trc tiếp thì bn có th đăng ký
các thành phn ng dng cn chy trong chế độ này. Mt s trường hp s dng ph biến
cho các ng dng cn chy trong chế độ Khi động Trc tiếp gm:</p>
<ul>
<li>ng dng có thông báo theo lch, như ng dng
đồng h báo thc.</li>
<li>ng dng cung cp các thông báo quan trng cho người dùng như ng dng SMS.</li>
<li>ng dng cung cp các dch v tr năng như Talkback.</li>
</ul>
<p>Nếu ng dng ca bn cn truy cp d liu khi đang chy trong chế độ Khi động Trc tiếp thì hãy s dng
lưu tr mã hóa thiết bị. B nh lưu tr được mã hóa ca thiết b có cha d liu
được mã hóa bng mt khóa ch kh dng sau khi thiết b đã thc hin mt
ln khi động được xác thc thành công.</p>
<p>Đối vi d liu cn được mã hóa bng mt khóa liên kết ti thông tin xác thc
ca người dùng như mã PIN hoc mt khu thì hãy s dng b nh lưu tr mã hóa thông tin xác thc.
B nh lưu tr mã hóa thông tin xác thc ch kh dng sau khi người dùng đã m khóa
thành công thiết bị, tính đến khi người dùng khi động li thiết b mt ln na. Nếu
người dùng m màn hình khóa sau khi m khóa thiết b thì thao tác này không khóa
b nh mã hóa thông tin xác thc.</p>
<h2 id="run">Yêu cu Truy cp để Chy trong quá trình Khi động Trc tiếp</h2>
<p>Các ng dng phi đăng ký các thành phn ca chúng vi h thng trước khi chúng
có th chy trong chế độ Khi động Trc tiếp hoc truy cp b nh lưu tr
mã hóa thiết bị. ng dng đăng ký vi h thng bng cách đánh du các thành phn là
<i>nhn biết mã hóa</i>. Để đánh du các thành phn ca bn là nhn biết mã hóa, hãy đặt thuc tính
<code>android:encryptionAware</code> thành true trong bn kê khai.<p>
<p>Các thành phn nhn biết mã hóa có th đăng ký để nhn mt thông đip truyn phát
<code>LOCKED_BOOT_COMPLETED</code> t
h thng khi thiết b được khi động li. Lúc này, b nh lưu tr
mã hóa thiết b s kh dng và thành phn ca bn có th thc thi các tác v cn được
chy trong chế độ Khi động Trc tiếp, như kích hot báo thc đã đặt.</p>
<p>Đon mã sau là mt ví d v cách đăng ký mt
{@link android.content.BroadcastReceiver} là nhn biết mã hóa và thêm mt
b lc ý định cho <code>LOCKED_BOOT_COMPLETED</code> trong bản kê khai của ứng dụng:</p>
<pre>
&lt;receiever
android:encryptionAware="true" &gt;
...
&lt;intent-filter&gt;
&lt;action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" /&gt;
&lt;/intent-filter&gt;
&lt;/receiver&gt;
</pre>
<p>Khi người dùng đã m khóa thiết b thì mi thành phn có th truy cp
c b nh lưu tr mã hóa thiết b ln b nh lưu tr mã hóa thông tin xác thc.</p>
<h2 id="access">Truy cp B nh Lưu tr Mã hóa ca Thiết bị</h2>
<p>Để truy cp b nh lưu tr mã hóa thiết bị, hãy to mt thc th
{@link android.content.Context} th hai bng cách gi
<code>Context.createDeviceEncryptedStorageContext()</code>. Tt c các lnh gi
API b nh lưu tr đều s dng bi cnh này để truy cp b nh lưu tr mã hóa thiết bị.
Ví d sau s truy cp b nh lưu tr mã hóa ca thiết b và m mt tp
d liu ng dng có sn:</p>
<pre>
Context directBootContext = Context.createDeviceEncryptedStorageContext();
// Access appDataFilename that lives in device encrypted storage
FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
// Use inStream to read content...
</pre>
<p>Ch s dng b nh lưu tr mã hóa ca thiết b
cho thông tin phi truy cp được trong chế độ Khi động Trc tiếp.
Không s dng b nh lưu tr mã hóa ca thiết b làm b lưu tr mã hóa cho mc đích chung.
Đối vi thông tin cá nhân ca người dùng, hoc d liu được mã hóa không cn thiết
trong chế độ Khi động Trc tiếp thì hãy s dng b nh lưu tr mã hóa thông tin xác thc.</p>
<h2 id="notification">Nhn thông báo M khóa ca Người dùng</h2>
<p>Mt khi người dùng m khóa thiết b sau khi khi động li, ng dng ca bn có th chuyn sang
truy cp b nh lưu tr mã hóa thông tin xác thc và s dng các dch v thông thường ca h thng
ph thuc vào thông tin xác thc người dùng.</p>
<p>Để nhn thông báo khi người dùng m khóa thiết b sau khi khi động li,
hãy đăng ký mt {@link android.content.BroadcastReceiver} t mt thành phn đang chy
để lng nghe thông báo <code>ACTION_USER_UNLOCKED</code>. Hoc bn có th
nhn thông báo có sn {@link android.content.Intent#ACTION_BOOT_COMPLETED
ACTION_BOOT_COMPLETED} lúc này s ch báo thiết b đã khi động xong và
người dùng đã m khóa thiết bị.</p>
<p>Bn có th truy vn trc tiếp để biết người dùng đã m khóa thiết b hay chưa bng cách gi
<code>UserManager.isUserUnlocked()</code>.</p>
<h2 id="migrating">Chuyn nhp D liu Có sn</h2>
<p>Nếu người dùng cp nht thiết b ca h để s dng chế độ Khi động Trc tiếp thì bn có th có d liu
hin hu cn được chuyn nhp sang b nh lưu tr mã hóa ca thiết bị. S dng
<code>Context.migrateSharedPreferencesFrom()</code> và
<code>Context.migrateDatabaseFrom()</code> để chuyn nhp d liu v tùy chn và cơ s d liu
gia b nh lưu tr mã hóa thông tin xác thc và b nh lưu tr mã hóa thiết bị.</p>
<p>Hãy phán đoán hp lý nht khi quyết định d liu nào nên chuyn nhp t b nh lưu tr mã hóa
thông tin xác thc sang b nh lưu tr mã hóa thiết bị. Bn không nên di chuyn
thông tin cá nhân ca người dùng như mt khu hoc các mã thông báo cp quyn sang
b nh lưu tr mã hóa thiết bị. Trong mt s trường hp, bn có th cn qun lý
các b d liu riêng bit trong hai b lưu tr mã hóa.</p>
<h2 id="testing">Kim th ng dng Nhn biết Mã hóa ca bn</h2>
<p>Kim th ng dng nhn biết mã hóa bng cách s dng chế độ Khi động Trc tiếp mi. Có
hai cách để kích hot Khi động Trc tiếp.</p>
<p class="caution"><strong>Cn trng:</strong> Kích hot Khi động Trc tiếp
s xóa sch mi d liu người dùng trên thiết bị.</p>
<p>Trên các thiết b được h tr có Android N được cài đặt, kích hot
Khi động Trc tiếp bng cách thc hin mt trong các thao tác sau:</p>
<ul>
<li>Trên thiết bị, bt <b>Developer options</b> nếu chưa hãy bt bng cách
vào <b>Settings &gt; About phone</b> và nhấn vào <b>Build number</b>
by ln. Khi màn hình tùy chn cho nhà phát trin kh dng, hãy vào
<b>Settings &gt; Developer options</b> và chn
<b>Convert to file encryption</b>.</li>
<li>S dng các lnh shell adb sau để kích hot chế độ Khi động Trc tiếp:
<pre class="no-pretty-print">
$ adb reboot-bootloader
$ fastboot --wipe-and-use-fbe
</pre>
</li>
</ul>
<p>Cũng có mt chế độ Khi động Trc tiếp gi lp trong trường hp bn cn chuyn đổi
các chế độ trên thiết b th nghim. Ch nên s dng chế độ Gi lp trong quá trình
phát trin và có th làm mt d liu. Để kích hot chế độ Khi động Trc tiếp gi lp,
hãy đặt mu hình khóa cho thiết bị, chn "No thanks" nếu được yêu cu
bt màn hình khi động bo mt khi đặt mt mu hình khóa và sau đó s dng
lnh shell adb sau:</p>
<pre class="no-pretty-print">
$ adb shell sm set-emulate-fbe true
</pre>
<p>Hãy s dng lnh sau để tt chế độ Khi động Trc tiếp gi lp:</p>
<pre class="no-pretty-print">
$ adb shell sm set-emulate-fbe false
</pre>
<p>S dng các lnh này có th khiến cho thiết b khi động li.</p>