2016-05-05 7 views
4

実際の発信者のようなアクティビティに情報が入力された状態で、ダイヤラにアクティビティ(テーマダイアログ)を表示する必要があります。ロックされていない電話機では正常に動作しています。ロックスクリーンのダイヤラーの上にアクティビティ(テーマダイアログ)を表示しますか?

しかし、ロックされた電話では、期待どおりに動作しませんでした。いくつかのグーグルでは、ダイアログをロック画面に表示するためにいくつかのフラグを追加する必要があります。

CallActivity.java

LayoutParams layoutParams = new LayoutParams(
    LayoutParams.MATCH_PARENT, 
    LayoutParams.WRAP_CONTENT, LayoutParams.TYPE_SYSTEM_DIALOG | LayoutParams.TYPE_SYSTEM_ALERT | 
    LayoutParams.TYPE_SYSTEM_OVERLAY, 
    LayoutParams.FLAG_NOT_TOUCH_MODAL | 
      LayoutParams.FLAG_NOT_FOCUSABLE | 
      LayoutParams.FLAG_TURN_SCREEN_ON | 
      LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
      LayoutParams.FLAG_KEEP_SCREEN_ON | 
      LayoutParams.FLAG_DISMISS_KEYGUARD, 
    PixelFormat.TRANSLUCENT); 
getWindow().setAttributes(layoutParams); 

上記のコードでは、私は活動をするために関連した変化は、ロック画面でよくダイアログ作業を行うことに関連するダイアログといくつかのフラグ(FLAG_TURN_SCREEN_ON、FLAG_SHOW_WHEN_LOCKED、FLAG_KEEP_SCREEN_ON、FLAG_DISMISS_KEYGUARD)として現れる添加(しかしそれはできませんでした)。

は私も(放送受信機から)

  Intent intent = new Intent(context, MyActivity.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      intent.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
      context.startActivity(intent); 

答えて

-1

は、システムアラートの許可を得てウィンドウマネージャにビューを追加して活動を開始

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 

mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 

mParams = new WindowManager.LayoutParams(); 
mParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; 
mParams.format = PixelFormat.TRANSLUCENT; 
mParams.flags = 262184; 

mWindowManager.addView(view, mParams); 

注:アプリのターゲットのAPIレベル23以上であれば、アプリユーザーは、権限管理画面を通じてこの権限をアプリに明示的に付与する必要があります。アプリはACTION_MANAGE_OVERLAY_PERMISSIONというアクションでインテントを送信してユーザーの承認を要求します。アプリは、この権限を持っているかどうかをSettings.canDrawOverlays()を呼び出して確認できます。

関連する問題