2010-01-27 11 views
17

Tôi đã tự hỏi liệu có ai có thể biết được làm cách nào để bật màn hình hộp thoại lên trên màn hình Android gốc?Android - Cách hiển thị hộp thoại trên màn hình gốc?

Tôi hiện đang có ứng dụng chặn cuộc gọi đi và dừng cuộc gọi, sau đó tôi muốn bật hộp thoại sẽ chuyển sang màn hình quay số và cảnh báo người dùng đã cố gắng gọi đã bị chặn và cho phép họ một số tùy chọn mới từ hộp thoại.

Tôi biết rằng một số người sẽ nói rằng tôi nên sử dụng thông báo thay vì tôi biết điều đó và cách nó không hoạt động, tôi cần có khả năng bật hộp thoại khi cuộc gọi bị chặn.

Đây là mã thoại của tôi cho đến nay

AlertDialog LDialog = new AlertDialog.Builder(context) 
    .setTitle("Call Blocked") 
    .setMessage("Call Blocked, reroute call?") 
    .setPositiveButton("ok", null).create(); 
     LDialog.show(); 

Tôi đoán tôi phải bằng cách nào đó có được những bối cảnh được rằng màn hình dialer?

Có ai có thể cung cấp bất kỳ trợ giúp và hỗ trợ nào hoặc liên kết đến hướng dẫn không?

Cảm ơn trước

Trả lời

56

Đối với ứng dụng của tôi, tôi đã sử dụng hoạt động với chủ đề Dialog. Bạn có thể tuyên bố chủ đề trong file manifest:

<activity android:name="PopupActivity" 
    android:launchMode="singleInstance" android:excludeFromRecents="true" 
    android:taskAffinity="" android:theme="@android:style/Theme.Dialog" /> 
  • sử dụng launcheMode="singleInstance"taskAffinity="" nếu popup của bạn được tách ra từ một ứng dụng chính của bạn. Nếu không, người dùng có thể nhấp vào nút quay lại và quay lại hoạt động trước đó của ứng dụng của bạn.
  • excludeFromRecents="true" để tránh cửa sổ bật lên của bạn xuất hiện trong các tác vụ gần đây (báo chí dài về nhà)
  • theme="@android:style/Theme.Dialog" để đặt chủ đề Dialog.
+3

Cảm ơn Thomas, đó là giải pháp tuyệt vời –

+0

Giải pháp tuyệt vời, cảm ơn! Đã cứu tôi rất nhiều thời gian! – mDroidd

+0

Tôi thực sự yêu bạn tbruyelle! thêm taskAffinity = "" đã giải quyết được vấn đề khiến tôi gặp khó khăn từ SO! – Daksh

4

Làm thế nào để có được tương đương với launchMode = singleTask trong mã

Tôi chưa thấy một lời giải thích rõ ràng về làm thế nào để thiết lập các cờ lập trình, vì vậy tôi sẽ bao gồm kết quả của tôi ở đây. tldr: bạn phải đặt FLAG_ACTIVITY_NEW_TASK và FLAG_ACTIVITY_MULTIPLE_TASK.

Nếu bạn khởi chạy ứng dụng này trực tiếp từ ứng dụng, hộp thoại của bạn sẽ xuất hiện ở đầu Hoạt động cuối cùng của ứng dụng. Nhưng nếu bạn sử dụng chương trình phát sóng PendingIntent của AlarmManager để khởi chạy "hộp thoại", bạn có thời gian để chuyển sang ứng dụng khác để bạn có thể thấy rằng "hộp thoại" sẽ xuất hiện trên ứng dụng kia, nếu kiểu được đặt thích hợp để hiển thị đằng sau nó.

Rõ ràng một người phải chịu trách nhiệm về thời điểm thích hợp khi hiển thị hộp thoại ở đầu các ứng dụng khác.

public class MyReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

// you have to set these flags here where you receive the broadcast 
// NOT in the code where you created your pendingIntent 
    Intent scheduledIntent = new Intent(context, AlertAlarmActivity.class); 
    scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
    context.startActivity(scheduledIntent);