android系统截屏接口

来源:互联网 发布:java insert的返回值 编辑:程序博客网 时间:2024/05/29 04:57

android系统截屏接口

最近有客户希望它们的apk能够调用系统截屏接口,实现他们的功能。这个需求的实现方案是通过接收客户apk发送的截图广播给SystemUI 调用截图方法takeScreenShot()来实现的,在这里记录一下。

系统截图功能的源码位置在
platform/framework/base/package/SystemUI/src/com/android/systemui/screenhot/GlobalScreenshot.java
具体操作类 –PhoneStatusBar.java
下面写一下具体实现
1.定义一个意图字符串

public static final String
SYSTEM_SHOOT=”com.screenshot.quietly”

2.添加到意图过滤器
filter.addAction(SYSTEMUI_SHOOT);//添加到意图过滤器

3.接收广播
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
…..
else if(SYSTEMUI_SHOOT.equals(action)) {

    Log.d("Victor","SYSTEMUI_LEKE_SHOOT: "+action);    String pp=intent.getExtra("pp").toString();//获取用户定义的图片路径    String pn= (intent.getExtra("pn")+".jpg").toString();//图片名        Settings.System.putString(mContext.getContentResolver(),"ssp", pp);        Settings.System.putString(mContext.getContentResolver(),"ssn", pn);        takeScreenShot();//调用此方法做开启服务操作        } 

}

4.执行takeScreenShot()

private void takeScreenShot() {

  String imageDir=Settings.System.getString(mContext.getContentResolver(), "ssp");  String imageNam=Settings.System.getString(mContext.getContentResolver(), "ssn");  File file=new File(imageDir);  String text=null;  Log.d("Victor","imageDir="+imageDir+ ",imageName="+imageNam);  file.mkdir();              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           Log.d("Victor","onServiceConnected---------");              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=0;                      msg.arg2=1;                      try {                      messenger.send(msg);                  } catch (RemoteException e) {                  }              }          }              @Override              public void onServiceDisconnected(ComponentName name) {}          };          if (mContext.bindService(intent, conn, Context.BIND_AUTO_CREATE)) {              mScreenshotConnection = conn;              mHandler.postDelayed(mScreenshotTimeout, 10000);          }      }  }
原创粉丝点击