android5.1状态栏添加一键截屏

1,vendor/mediatek/proprietary/operator/OP09/packages/apps/Plugins/res/values/config.xml

<string name="quick_settings_tiles_Dual_Sim_default" translatable="false">

wifi,bt,inversion,cell,dataconnection,simdataconnection,airplane,rotation,flashlight,location,cast,hotspot,hotknot,audioprofile,takescreenshot,dulsimsettings,apnsettings

 </string>

2,在frameworks/base/packages/SystemUI/res/中添加对应的字符串和相应分辨率下的图片资源。

3,修改frameworks/base/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java

class GlobalScreenshot 声明为 public

method takeScreenshot  声明为 public

4,修改frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java

private QSTile<?> createTile(String tileSpec) {

。。。。。。

else if (tileSpec.equals("takescreenshot")) return new TakeScreenShotTile(this);//zjx add

。。。。。。

}

5,frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/TakeScreenShotTile.java

public class TakeScreenShotTile extends QSTile<QSTile.BooleanState> {
    private static final String TAG = "TakeScreenShotTile";

    private static final int TAKE_SCREEN_SHOT_MESSAGE = 10000;
	private static GlobalScreenshot mScreenshot;
    
    private int mAudioState = R.drawable.ic_qs_take_screenshot;

    public TakeScreenShotTile(Host host) {
        super(host);
    }

    @Override
    protected BooleanState newTileState() {
        return new BooleanState();
    }

    @Override
    public void setListening(boolean listening) {
    }

    @Override
    protected void handleClick() {
        mHost.startSettingsActivity(new Intent());
        Message msg = mHandler.obtainMessage(TAKE_SCREEN_SHOT_MESSAGE);
        mHandler.sendMessageDelayed(msg,1000);
    }
    @Override
    protected void handleLongClick() {
        mHost.startSettingsActivity(new Intent());
        Message msg = mHandler.obtainMessage(TAKE_SCREEN_SHOT_MESSAGE);
        mHandler.sendMessageDelayed(msg,1000);
    }

    @Override
    protected void handleUpdateState(BooleanState state, Object arg) {
        state.label = mContext.getString(R.string.take_screenshot);
        state.visible = true;
        state.icon = ResourceIcon.get(mAudioState);
    }

    Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case TAKE_SCREEN_SHOT_MESSAGE:
				<span style="background-color: rgb(255, 0, 0);">//takeScreenshot(); //此方法也可以截屏,摘自PhoneWindowManager.java类中</span>
				final Messenger callback = msg.replyTo;
				if (mScreenshot == null) {
					mScreenshot = new GlobalScreenshot(mContext);
				}
				mScreenshot.takeScreenshot(new Runnable() {
					@Override public void run() {
						Message reply = Message.obtain(null, 1);
						try {
							if(callback != null){
								callback.send(reply);
							}
						}catch(RemoteException e){
						}
					}
				}, msg.arg1 > 0, msg.arg2 > 0);
				break;                    
            default:
                break;
            }
        }
    };

	/*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;
				}
			}
		}
	};

	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() {
				@Override
				public 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()) {
							@Override
								public 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;
						//if (mStatusBar != null && mStatusBar.isVisibleLw())
						//	msg.arg1 = 1;
						//if (mNavigationBar != null && mNavigationBar.isVisibleLw())
						//	msg.arg2 = 1;
						try {
							messenger.send(msg);
						} catch (RemoteException e) {
						}
					}
				}
				@Override
					public void onServiceDisconnected(ComponentName name) {}
			};
			if (mContext.bindServiceAsUser(
						intent, conn, Context.BIND_AUTO_CREATE, UserHandle.CURRENT)) {
				mScreenshotConnection = conn;
				mHandler.postDelayed(mScreenshotTimeout, 10000);
			}
		}
	}*/
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值