<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                我們截取與Copy操作相關的代碼: **sample** ~~~ //首先獲取能與CBS交互的ClipboardManager對象 ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); //調用setPrimaryClip函數,參數是ClipData.newUri函數的返回值 clipboard.setPrimaryClip(ClipData.newUri( getContentResolver(),"Note",noteUri)); ~~~ ClipData的newUri是一個static函數,用于返回一個存儲URI數據類型的ClipData,代碼如下。根據前文所述可知,ClipData對象裝載的就是可保存在剪貼板中的數據。 **ClipData.java** ~~~ static public ClipData newUri(ContentResolverresolver, CharSequence label, Uri uri) { Itemitem = new Item(uri); //創建一個Item,將Uri直接傳給它的構造函數 String[] mimeTypes = null; /* 下邊代碼的功能是獲取這個Uri代表的數據的MIME類型。先嘗試利用ContentResolver 從ContentProvider那查詢,如果查詢不到,則設置mimeTypes為 MIMETYPES_TEXT_URILIST,它的定義是new String[“text/uri-list”] */ if("content".equals(uri.getScheme())) { String realType = resolver.getType(uri); //查詢該uri所指向的數據的mimeTypes mimeTypes = resolver.getStreamTypes(uri, "*/*"); if (mimeTypes == null) { if (realType != null) { mimeTypes = new String[] { realType,ClipDescription.MIMETYPE_TEXT_URILIST }; } } else { ...... } if(mimeTypes == null) { mimeTypes = MIMETYPES_TEXT_URILIST; } //創建一個ClipData對象 return new ClipData(label, mimeTypes, item); } //ClipData的構造函數 public ClipData(CharSequence label, String[]mimeTypes, Item item) { mClipDescription = new ClipDescription(label, mimeTypes); ...... mIcon = null; mItems.add(item);//將item對象添加到mItems數組中 } ~~~ newUri函數的主要功能在于,獲得URI所指向的數據的數據類型。對于使用剪切板服務的程序來說,了解剪切板中數據的數據類型相當重要,因為這樣可以判斷自己能否處理這種類型的數據。 URI和MIME的關系: URI指向數據的位置,這和PC機上文件的存儲位置類似,例如c:/dfp。MIME則表示該數據的數據類型。在Windows平臺上是采用后綴名來表示文件類型的,前面提到的c盤下的dfp文件,后綴是wav,表示該文件是一個wav音頻。 對于剪切板來說,數據源由URI指定,數據類型由MIME表示,兩者缺一不可。 獲得一個ClipData后,將調用setPrimaryClip函數,將數據傳遞到CBS。setPrimaryClip的代碼如下: ~~~ public void setPrimaryClip(ClipData clip) { try { //跨Binder調用,先要把參數打包。有興趣的讀者可以看看writToParcel函數 getService().setPrimaryClip(clip); }catch (RemoteException e) { } } ~~~ 通過Binder發送setPrimaryClip請求后,由CBS完成實際功能,代碼如下: **ClipboardService.java** ~~~ public void setPrimaryClip(ClipData clip) { synchronized (this) { ...... //權限檢查,后面會在3.7.3中單獨分析 checkDataOwnerLocked(clip,Binder.getCallingUid()); */ //和權限相關,后續會分析 clearActiveOwnersLocked(); //保存新的clipData到mPrimaryClip中 mPrimaryClip = clip; / * mPrimaryClipListeners是一個RemoteCallbackList數組, 當CBS中的ClipData發生變化時,CBS需要向那些監控剪切板的 客戶端發送通知。客戶端通過addPrimaryClipChangedListener函數 注冊回調 */ final int n = mPrimaryClipListeners.beginBroadcast(); for (int i = 0; i < n; i++) { try{ //通知客戶端,剪切板的內容發生變化 mPrimaryClipListeners.getBroadcastItem(i). dispatchPrimaryClipChanged(); }...... } mPrimaryClipListeners.finishBroadcast(); } } ~~~ setPrimaryClip比較簡單。但是由于新增支持Uri和Intent這兩種數據類型,因此在安全性方面還有一些需要考慮的地方。這部分內容我們放到3.7.3小節去分析。 RemoteCallbackList是一個比較重要的常用類,很有必要掌握它的用法。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看