1,vendor/mediatek/proprietary/operator/OP09/packages/apps/Plugins/res/values/
<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/
class GlobalScreenshot 声明为 public
method takeScreenshot 声明为 public
4,修改frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/
private QSTile<?> createTile(String tileSpec) {
。。。。。。
else if (("takescreenshot")) return new TakeScreenShotTile(this);//zjx add
。。。。。。
}
5,frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/
public class TakeScreenShotTile extends QSTile<> {
private static final String TAG = "TakeScreenShotTile";
private static final int TAKE_SCREEN_SHOT_MESSAGE = 10000;
private static GlobalScreenshot mScreenshot;
private int mAudioState = .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() {
(new Intent());
Message msg = (TAKE_SCREEN_SHOT_MESSAGE);
(msg,1000);
}
@Override
protected void handleLongClick() {
(new Intent());
Message msg = (TAKE_SCREEN_SHOT_MESSAGE);
(msg,1000);
}
@Override
protected void handleUpdateState(BooleanState state, Object arg) {
= (.take_screenshot);
= true;
= (mAudioState);
}
Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch () {
case TAKE_SCREEN_SHOT_MESSAGE:
<span style="background-color: rgb(255, 0, 0);">//takeScreenshot(); //此方法也可以截屏,摘自类中</span>
final Messenger callback = ;
if (mScreenshot == null) {
mScreenshot = new GlobalScreenshot(mContext);
}
(new Runnable() {
@Override public void run() {
Message reply = (null, 1);
try {
if(callback != null){
(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) {
(mScreenshotConnection);
mScreenshotConnection = null;
}
}
}
};
private void takeScreenshot() {
synchronized (mScreenshotLock) {
if (mScreenshotConnection != null) {
return;
}
ComponentName cn = new ComponentName("",
"");
Intent intent = new Intent();
(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 = (null, 1);
final ServiceConnection myConn = this;
Handler h = new Handler(()) {
@Override
public void handleMessage(Message msg) {
synchronized (mScreenshotLock) {
if (mScreenshotConnection == myConn) {
(mScreenshotConnection);
mScreenshotConnection = null;
(mScreenshotTimeout);
}
}
}
};
= new Messenger(h);
msg.arg1 = msg.arg2 = 0;
//if (mStatusBar != null && ())
// msg.arg1 = 1;
//if (mNavigationBar != null && ())
// msg.arg2 = 1;
try {
(msg);
} catch (RemoteException e) {
}
}
}
@Override
public void onServiceDisconnected(ComponentName name) {}
};
if ((
intent, conn, Context.BIND_AUTO_CREATE, )) {
mScreenshotConnection = conn;
(mScreenshotTimeout, 10000);
}
}
}*/
}