Android Facebook锁屏通知

在最新版本的Android应用程序Facebook上显示锁屏通知function,就像这个截图一样:

截图

有没有人试图实现这个?

我知道在locking屏幕上显示活动很简单,但不幸的是,它不适用于半透明的背景。 基本上它的作品,但低于我们的活动,我们看到发射器屏幕,而不是locking屏幕(如锁屏在这种情况下,也将是透明的)。

我现在所尝试的是:

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

正如我所描述的 – 一切都有效,但不透明。

从我的观察Facebook的使用主题:

 @android:style/Theme.Translucent.NoTitleBar 

并没有权限:

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

另外我注意到,locking屏幕通知获取触摸,所以我们不能通过手势显示状态栏的通知。

任何想法如何在Android L发布之前创build这种通知。

Solutions Collecting From Web of "Android Facebook锁屏通知"

其实, ferdy182已经成为了一件事。

以下是我使用android.permission.SYSTEM_ALERT_WINDOW

在这里输入图像说明

所以,我不能用一个Activity做到这一点。 这是行不通的。 我不得不实现一个使用WindowManager添加一个ViewService

一个可能的工作stream程将是: BroadcastReceiver收到BroadcastReceiver =>启动Service =>服务添加所需的视图。

现在,代码(注释解释了一些事情):

 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" /> 

我认为它可能使用与Messenger的聊天头泡沫相同的技巧。

基本上你使用这个权限“android.permission.SYSTEM_ALERT_WINDOW”来显示你的视图上方的其他应用程序。

我没有尝试过自己,但我很确定他们使用了这个。

从文档“允许应用程序使用typesTYPE_SYSTEM_ALERT打开窗口,显示在所有其他应用程序的顶部。” http://developer.android.com/reference/android/Manifest.permission.html#SYSTEM_ALERT_WINDOW