2014-07-23 4 views
18

같은이 스크린 샷, 화면 잠금 알림 기능을 보여 주었다?안드로이드 페이스 북 잠금 화면 알림

잠금 화면 상단에 Activity를 표시하는 것이 간단하지만 불행히도 반투명 배경에는 작동하지 않습니다. 근본적으로 작동하지만 우리의 활동 아래에서는 런처 화면을 보지만 화면 잠금은 아닙니다 (이 경우 잠금 화면도 투명합니다). 지금 바로 시도 무엇

입니다 : 내 활동에

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 

.

또한 나는이 예를 시도 : https://gist.github.com/daichan4649/5352944

을 그리고 설명 - 모든 작동하지 않습니다하지만 투명성. 내 관찰 페이스 북에서

테마 사용

@android:style/Theme.Translucent.NoTitleBar 

을 허가하지 않습니다

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

이 또한 내가 잠금 화면 알림을 터치 그래서 우리는 제스처가 상태 표시 줄에서 알림을 표시 할 수 없습니다 사들입니다 것으로 나타났습니다 .

Android L 출시 전에 그러한 종류의 알림을 만드는 방법에 대한 아이디어.

+0

어떻게 배경 이미지와 함께 활동을 만드는 방법에 대한 (반투명하다)? –

+0

동일 - 반투명 스타일을 사용하는 경우 잠금 화면이 아니라 내 액티비티 아래 실행기 화면이 표시됩니다. 반투명을 사용하지 않으면 이미지 배경 아래에 검정색 배경 (창에서)이 생깁니다. –

+0

바닐라 안드로이드는 불가능하다고 생각합니다. HTC One M8에서 Sense 6을 사용하여 Android 4.4.2를 실행 중입니다. refer-http : //techcrunch.com/2014/07/08/facebook-tests-android-l 스타일 잠금 화면 알림 및 http://lifehacker.com/floatify-brings-android-ls-new-notifications-to-any-and-1601708892 –

답변

17

는 사실, ferdy182했다/뭔가에 있습니다.

는 여기가 android.permission.SYSTEM_ALERT_WINDOW를 사용하여 가지고 무엇을 : 그래서

enter image description here

, 내가 Activity로이 작업을 수행 할 수 있습니다. 그것은 단지 작동하지 않을 것입니다. WindowManager을 사용하여 View을 추가 한 Service을 구현해야했습니다.

하나의 가능한 워크 플로우는 다음과 같습니다. BroadcastReceiver => 서비스 시작 => 서비스에서 필수보기를 추가합니다.

이제 코드 (코멘트는 몇 가지 설명) :

public class MyService extends Service { 

    View mView; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     // instance of WindowManager 
     WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

     LayoutInflater mInflater = (LayoutInflater) 
             getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     // inflate required layout file 
     mView = mInflater.inflate(R.layout.abc, null); 

     // attach OnClickListener 
     mView.findViewById(R.id.some_id).setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // you can fire an Intent accordingly - to deal with the click event 
       // stop the service - this also removes `mView` from the window 
       // because onDestroy() is called - that's where we remove `mView` 
       stopSelf(); 
      } 
     }); 

     // the LayoutParams for `mView` 
     // main attraction here is `TYPE_SYSTEM_ERROR` 
     // as you noted above, `TYPE_SYSTEM_ALERT` does not work on the lockscreen 
     // `TYPE_SYSTEM_OVERLAY` works very well but is focusable - no click events 
     // `TYPE_SYSTEM_ERROR` supports all these requirements 
     WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
      ViewGroup.LayoutParams.WRAP_CONTENT, 
      ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0, 
      WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, 
      WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
        | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD 
        | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
        | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, 
         PixelFormat.RGBA_8888); 

     // finally, add the view to window 
     mWindowManager.addView(mView, mLayoutParams); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 

     // remove `mView` from the window 
     removeViewFromWindow(); 
    } 

    // Removes `mView` from the window 
    public void removeNow() { 
     if (mView != null) { 
      WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
      wm.removeView(mView); 
     } 
    } 
} 

그리고 마지막으로는 앱의 매니페스트에 권한을 추가 :

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

이 코드를 테스트 했습니까? – roiberg

+1

@roiberg 예. 나는 스크린 샷을 올리는 것이 그 일을 분명히했을 것이라고 생각했다. – Vikram

+0

고마워요 !!! 나는 몇 시간 안에 대답을 승인 할 것이다. Ahh. – roiberg

0

나는 아마도 Messenger의 채팅 헤드 거품과 같은 트릭을 사용하고 있다고 생각합니다.

기본적으로이 사용 권한 "android.permission.SYSTEM_ALERT_WINDOW" 을 사용하면 다른 앱 위에보기를 표시 할 수 있습니다.

나는 나 자신을 시험해 보지 않았지만 나는 그들이 이것을 사용했다고 확신한다. 워드 프로세서 에서

은 "응용 프로그램이 다른 응용 프로그램의 상단에 표시된 유형의 TYPE_SYSTEM_ALERT를 사용하여 창을 열 수 있습니다." http://developer.android.com/reference/android/Manifest.permission.html#SYSTEM_ALERT_WINDOW

+1

다른 모든 응용 프로그램 중 하나에 표시되지만 lockscreen에는 표시되지 않습니다. 그렇기 때문에 잠금 화면에서 채팅 헤드를 볼 수 없습니다. –