2017-03-09 2 views
0

ダイアログと着信画面の両方をクリック可能にします。私はこのサイトからさまざまなソリューションを試しましたが、いくつかの条件で動作するものとそうでないものがあります。私は真の呼び出し元のようなアプリケーションを作成したい、私はBroadcastReceiverからアクティビティを呼び出しました。受信した画面がフルスクリーンではないため、画面がロックされていないと、私のコードは完全に機能します。しかし、画面がフルスクリーンの場合、ダイアログの活動は呼び出し画面上に数ミリ秒間表示され、呼び出し画面の後ろに移動します。また、私はこれを試してみました。ここダイアログロック着信画面

私はBroadcastReceiver

から
public class IncomingCallActivity extends AppCompatActivity { 

private static final int MSG_ID_CHECK_TOP_ACTIVITY = 1; 

private String userName; 
private String TAG = IncomingCallActivity.class.getSimpleName(); 
private Window wind; 

private PowerManager powerManager; 
private PowerManager.WakeLock wakeLock; 

/*private ActivityManager mActivityManager; 
private boolean mDismissed = false;*/ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    wind = this.getWindow(); 
    wind.requestFeature(Window.FEATURE_NO_TITLE); 
    wind.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
    wind.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
    wind.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
    wind.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 

    powerManager = (PowerManager)getSystemService(Context.POWER_SERVICE); 
    wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Lock"); 
    wakeLock.acquire(); 

    setContentView(R.layout.activity_incoming_call); 
    userName = getIntent().getStringExtra(IncomingCallReceiver.NAME_KEY); 

    final TextView textView = (TextView) findViewById(R.id.tvUsername); 
    textView.setText(userName); 

    final ImageView ivCancel = (ImageView) findViewById(R.id.ivCancel); 
    ivCancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      wakeLock.release(); 
      IncomingCallActivity.this.finish(); 
     } 
    }); 

} 

}

答えて

1
 //Add Permissions in Manifest file and don't forget to check overlay permission 
      <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 
      <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/> 

    //Create Class Level Variable or as per requirement 

       WindowManager.LayoutParams mWindowsParams; 
       WindowManager mWindowManager; 
       View mDialogView; 

    //initialize variable 
mWindowsParams =new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, 
            WindowManager.LayoutParams.WRAP_CONTENT, 
            WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, 
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
            PixelFormat.TRANSLUCENT); 
mWindowManager=(WindowManager)context.getSystemService(Context.WINDOW_SERVICE); 

//Add Window on your event 
mWindowManager.addView(mDialogView, mWindowsParams); 

//For Remove window 

if (mDialogView.getParent() != null) { 
     try { 
      mWindowManager.removeViewImmediate(mDialogView); 
      } catch (Exception e) { 

      } 
     } 
+0

と呼ばれる私の活動の私のコードですが、それは私が両方の画面がクリッカブルたい着信画面がunclickableようになります。 –

+0

この問題に直面しない同じウィンドウパラメータを追加します。着信call.andの表示をポップアップするために同じコードを使用しています。ダイアログビューをLayoutInflaterとして追加しようとします。inflater =(LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mDialogView = inflater.inflate(R.layout.small_pop_up_layout、 null); –

+0

それは与えられたParamsとうまくいった。巨大な(素晴らしい)Gautamに感謝します。私は長い間苦労していた。 –

関連する問題