다른 스레드에서 메시지를 받았지만 대화 상자가 작업에 의존하지 않아야한다는 팝업 창이 필요합니다. 즉, 화면 포커스가있는 곳이면 대화 상자가 표시되어야합니다.PopUp 대화 상자 배경 스레드에서 안드로이드
할 수 있습니까? 대화 상자는 작업별로 처리되기 때문에 서비스를 사용할 생각 이었지만 다시 한 번 더 스레드가 추가 될 것이므로이를 피하고 싶습니다.
다른 옵션도 있습니까?
다른 스레드에서 메시지를 받았지만 대화 상자가 작업에 의존하지 않아야한다는 팝업 창이 필요합니다. 즉, 화면 포커스가있는 곳이면 대화 상자가 표시되어야합니다.PopUp 대화 상자 배경 스레드에서 안드로이드
할 수 있습니까? 대화 상자는 작업별로 처리되기 때문에 서비스를 사용할 생각 이었지만 다시 한 번 더 스레드가 추가 될 것이므로이를 피하고 싶습니다.
다른 옵션도 있습니까?
활동이 사용자의 전화 활동에 집중되지 않은 경우 대화 상자를 표시하는 방법을 묻는 경우 알림을 대신 사용해보십시오. 다른 응용 프로그램을 통해 대화 상자를 표시하면 사용자가 다른 작업을 수행 할 때 인터럽트됩니다. Android UI guidelines에서 :
사용 알림 시스템 - 에 통지
당신의 배경 서비스가 필요한 경우 대신하지 사용 대화 상자 표준 알림 시스템을 사용하여, 사용자에게 통지 - 대화 또는 토스트를 사용하여 알림을 보내지 마십시오. 대화 상자 나 토스트는 즉시 초점을 사용자를 방해, 초점을 복용 멀리 그들이 무엇을하고 있는지부터 것 : 사용자가 텍스트를 입력하는 순간 대화 나타납니다의 중간에있을 수있는 실수 온 역할을 할 수 대화. 사용자는 알림이있는 을 처리하는 데 익숙하며 메시지에 응답하려면 편의에 따라 알림 창을 풀다운하면됩니다.
알림을 만들 수있는 가이드는 여기에 있습니다 : http://developer.android.com/guide/topics/ui/notifiers/notifications.html이
인사를 난은 항상 응용 프로그램 대리인이 전화로 UI 변경 사항을 듣고 안드로이드에서 비슷한 점이 있습니까? – Sam97305421562
Facebook Messenger (Bubbles)는이 규칙을 따르지 않습니다. . . – sospedra
@Bursos 나는 당신의 요점이 무엇인지 모르겠습니다. Facebook은 종종 Android UI 가이드 라인을 따르지 않습니다. 또한 거품이 대화 상자처럼 사용자 입력을 처리하지 않습니다. – Intrications
대체 솔루션 :
AlertDialog dialog;
//add this to your code
dialog = builder.create();
Window window = dialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.token = mInputView.getWindowToken();
lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
window.setAttributes(lp);
window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
//end addons
alert.show();
내가 제대로 이해하면 당신은 당신의 모든 활동에 대한 기본 클래스를 사용할 수
public abstract class BaseActivity extends Activity{
protected static BaseActivity current_context = null;
@override
protected void onPause(){
current_context = null;
super.onPause();
}
@override
protected void onResume(){
current_context = this;
super.onResume();
}
public static void showDialog(/*your parameters*/){
//show nothing, if no activity has focus
if(current_context == null)return;
current_context.runOnUiThread(new Runnable() {
@override
public void run(){
AlertDialog.Builder builder =
new AlertDialog.Builder(current_context);
//your dialog initialization
builder.show();
}
});
}
}
스레드에서 BaseActivity.showDialog(..)
대화 상자를 표시하지만이 방법은 작동하지 않습니다. 상단에 대화 상자를 표시하려면 대상 장치의 모든 동작이입니다.
나는 그가 다음과 같은 질문을 시도하고 있다고 생각합니다. 어떻게 별도의 스레드에서 실행중인 서비스로부터 대화를 시작할 수 있습니까? 실행중인 활동은 다양 할 수 있습니다. 대화 상자를 표시하려면 현재 활동을 지정해야합니다. –
가능한 솔루션은 활동을 사용하는 것입니다 http://stackoverflow.com/posts/3912748/revisions –
https://stackoverflow.com/a/29804684/2149195 – RBK