1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Android 在导航栏上添加一个截屏按键 点击进行截屏

Android 在导航栏上添加一个截屏按键 点击进行截屏

时间:2020-07-21 20:54:28

相关推荐

Android  在导航栏上添加一个截屏按键 点击进行截屏

项目中碰到要求在导航栏上添加截屏按钮的要求,因为正常截屏是在下拉状态栏中,客户截屏操作觉得太麻烦了,所以下面介绍如何实现该功能:

1,首先添加图标到导航栏上,如何添加图标请查询我之前的博客,链接:/lancelots/article/details/82864210

2,实现点击截屏,修改文件为PhoneStatusBar.java,路径frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java.在该文件中,定义点击监听事件,并实现截屏功能

private View.OnClickListener mLenovoClickListener = new View.OnClickListener(){@Overridepublic void onClick(View v) {android.util.Log.d("lei","click capture bitmap");mHandler.post(mScreenshotRunnable);}};final Object mScreenshotLock = new Object();ServiceConnection mScreenshotConnection = null;final Runnable mScreenshotTimeout = new Runnable() {@Override public void run() {synchronized (mScreenshotLock) {if (mScreenshotConnection != null) {mContext.unbindService(mScreenshotConnection);mScreenshotConnection = null;}}}};// Assume this is called from the Handler thread.private void takeScreenshot() {synchronized (mScreenshotLock) {if (mScreenshotConnection != null) {return;}ComponentName cn = new ComponentName("com.android.systemui","com.android.systemui.screenshot.TakeScreenshotService");Intent intent = new Intent();intent.setComponent(cn);ServiceConnection conn = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {synchronized (mScreenshotLock) {if (mScreenshotConnection != this) {return;}Messenger messenger = new Messenger(service);Message msg = Message.obtain(null, 1);final ServiceConnection myConn = this;Handler h = new Handler(mHandler.getLooper()) {@Overridepublic void handleMessage(Message msg) {synchronized (mScreenshotLock) {if (mScreenshotConnection == myConn) {mContext.unbindService(mScreenshotConnection);mScreenshotConnection = null;mHandler.removeCallbacks(mScreenshotTimeout);}}}};msg.replyTo = new Messenger(h);msg.arg1 = msg.arg2 = 0;msg.arg1 = 1;msg.arg2 = 1;try {messenger.send(msg);} catch (RemoteException e) {}}}@Overridepublic void onServiceDisconnected(ComponentName name) {}};if (mContext.bindServiceAsUser(intent, conn, Context.BIND_AUTO_CREATE, UserHandle.CURRENT)) {mScreenshotConnection = conn;mHandler.postDelayed(mScreenshotTimeout, 10000);}}}private final Runnable mScreenshotRunnable = new Runnable() {@Overridepublic void run() {takeScreenshot();}};private void prepareNavigationBarView() {......mNavigationBarView.getLenovoMiaButton().setOnClickListener(mLenovoClickListener); //设置监听......}

如此这般,截屏功能就实现完毕了~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。