onClick 호출 되는 Thread가 ui Thread가 아니라. 꼬이는 듯 합니다.
권한이 있다면, 아래와 같이 핸들러로 처리 해 보세요.
public class MainActivity extends Activity {
private View mFaceDialogView = null;
private Context mContext;
private WindowManager mWindowManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
Button btn = (Button) findViewById(R.id.button);
final WindowManager.LayoutParams mFaceDialogParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY,
WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING,
PixelFormat.TRANSLUCENT
);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
uiHandler.sendEmptyMessage(0);
}
});
}
private Handler uiHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 0:
addView();
break;
}
}
}
private void addView() {
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
mFaceDialogView = layoutInflater.inflate(R.layout.fingerprint_dialog, null);
mWindowManager.addView(mFaceDialogView, mFaceDialogParams);
}
}