Wednesday, October 4, 2017

Hiện thông báo khi ứng dụng mở lần đầu

Đôi khi có các ứng dụng ta cần biết người dùng mở lên lần đầu tiên, ta sẽ có thông báo nào đó.
Ta muốn hiện chỉ một lần để người dùng biết là được rồi, không phải cứ mở lên là hiện sẽ gây bất tiện cho người dùng.
Ta sẽ dùng kiến thức đã học về đọc ghi dữ liệu để làm việc này.
Ý tưởng như sau:
Khi ứng dụng mở lên, ta sẽ đọc một file có tên kiemtra.text, nếu file đọc ra có độ dài chuỗi bằng 0, ta kết luận rằng đây là lần mở đầu tiên. Ta hiện thông báo nào đó.
Sau đó khi vào ứng dụng thoát, ta ghi lại một file kiemtra.txt. Lần sau mở lên ắt là đọc ra sẽ có ký tự ở đó. Có ký tự thì ta không thông báo nữa  vì người dùng lần đầu đã biết rồi.
Trước tiên ta khai báo một biến toàn cục có tên dodai. Copy dòng sau lên trên chữ Override
int dodai=0;
Ta đọc file kiemtra.txt ra chuỗi, nếu độ dài chuỗi =0, ta hiện thông báo rằng đây là lần mở đầu tiên. Copy đoạn sau xuống dưới đoạn findViewById.
try {
String FILE_NAME = "kiemtra.txt";         
FileInputStream fIS = openFileInput(FILE_NAME);          
byte[] arrayData = new byte[fIS.available()];
if((fIS.read(arrayData))!= -1){
     String fileContent = new String(arrayData);
docra=fileContent;          
}   
fIS.close();           
} catch (Exception e) {
//Log.e("Error", e.toString());
}
dodai=docra.length();
//nếu 0 tức chưa có file kiemtra.
if(dodai==0){
              Toast.makeText(MainActivity.this, "Đây là lần mở đầu tiên",
                        Toast.LENGTH_SHORT).show();
          }

Thực tế trong lệnh if làm gì là tùy bạn.
Tiếp theo đã biết là chưa có file kiemtra thì khi thoát ta ghi file đó ra để lần sau khi mở app đọc thì đã có nó rồi, ta không thông báo nữa.
Copy đoạn sau xuống trên ngoặc đóng cuối cùng.
@Override
     public void onBackPressed()
     {   
     if(dodai==0){
     String vao="Đây là dòng ghi vào";
     try {
FileOutputStream fos = openFileOutput("kiemtra.txt", Context.MODE_APPEND);
OutputStreamWriter osw = new OutputStreamWriter(fos);
osw.append(vao);
osw.flush();
osw.close();
      } catch (FileNotFoundException e) {         
                  e.printStackTrace();
     } catch (IOException e) {
                  e.printStackTrace();
 }
}
          finish();
}
Lệnh này để khi người dùng ấn phím Back trên điện thoại, nếu độ dài file đọc ra bằng 0 tức chưa có nó thì ta ghi nó ra, dùng một dòng chữ bất kỳ.
Như vậy khi mở lần 2 ắt là đọc ra sẽ có ký tự và ta biết đó không phải lần đầu.
Nếu ứng dụng có nút Quit, bạn cho lệnh này từ chỗ if vào trong nút Quit là được.
Chạy thử để thấy ứng dụng chỉ thông báo Toast có một lần đầu.
Trong bài xóa dòng ListView mở lại không hiện dòng xóa, ta cũng đọc file danhsach để kiểm tra xem có chưa, chưa có mới ghi từ mảng.

Dùng cách đọc file kiểm tra như trên cũng có thể làm tương tự, đã biết là mở lần sau, ta không ghi file danhsach từ mảng nữa.

No comments:

Post a Comment