2016-07-14 11 views
5

Ứng dụng của tôi nhằm mục đích chỉ cho phép người dùng đã đăng nhập truy cập các hoạt động. Nếu người dùng đăng xuất, tùy chọn Chia sẻ boolean được Đăng nhập được đặt thành false và người dùng không nên truy cập phần còn lại của các hoạt động ngoại trừ LoginActivity.Cách đóng tất cả các hoạt động và thoát khỏi ứng dụng

Tuy nhiên, tôi có thể truy cập tất cả các hoạt động đã mở trước đó bằng cách nhấn nút quay lại.

Tôi sẽ sử dụng finish(); khi mở từng hoạt động nhưng sau đó tôi muốn người dùng vẫn sử dụng nút quay lại trong khi họ đang đăng nhập.

Tôi đã thử các giải pháp từ những câu hỏi tương tự khác như

Intent intent = new Intent(getApplicationContext(), LoginActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("EXIT", true); 
startActivity(intent); 

và trên onCreate() của LoginActivity của tôi, tôi đã thêm

if (getIntent().getBooleanExtra("EXIT", false)) { 
     finish(); 
    } 

Khi tôi bấm tùy chọn logout, các p thay vào đó, hoạt động hồi sinh sẽ mở ra.

Mọi đề xuất vui lòng giúp tôi?

+0

hãy thử điều này .. http://stackoverflow.com/a/38268217/6334037 – user392117

Trả lời

4

Bạn nên sử dụng lá cờ này, mà rõ ràng nhiệm vụ của bạn và tạo ra một cái mới

Intent intent = new Intent(getApplicationContext(), LoginActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent); 
+1

Điều này làm việc cho tôi. – Mwas

+1

Bạn được chào đón bro! –

2

Cố gắng thêm tất cả các hoạt động trong mảng và khi bạn muốn loại bỏ chỉ cần loại bỏ nó từ mảng và kết thúc hoạt động đó. xem câu trả lời của tôi ở đây Remove activity from stack

3
if (getIntent().getBooleanExtra("EXIT", false)) { 
     finish(); 
android.os.Process.killProcess(android.os.Process.myPid()); 
    } 
3

Hãy thử điều này

Bạn cần phải thêm những lá cờ trong Ý định ..

Intent intent = new Intent(getApplicationContext(), LoginActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.putExtra("EXIT", true); 
startActivity(intent); 
finish(); 
0

tôi phải đối mặt với một tình huống tương tự. Như tôi đã tìm ra, ngay cả khi tôi gọi hàm finish() ngay từ đầu, toàn bộ hàm onCreate() được thực thi. Sau đó, nó sẽ kết thúc. Trong kịch bản của tôi, trong hàm onCreate(), tôi gọi đến một Hoạt động khác. Vì vậy, ngay cả khi hoạt động chính kết thúc sau onCreate(), hoạt động thứ hai vẫn tồn tại. Vì vậy, giải pháp của tôi là,

private boolean finish = false;

trong onCreate() của hàm chính,

if(intent.getBooleanExtra("EXIT", false)) { 
     finish(); 
     finish = true; 
    } 

và tôi đặt một tấm séc trong tất cả các điều hướng

if(!finish) { 
     Intent intent = new Intent(MainActivity.this, LoginActivity.class); 
     startActivity(intent); 
     finish(); 
    } 

chức năng thoát của tôi là,

Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent.putExtra("EXIT", true); 
    startActivity(intent); 
Các vấn đề liên quan