<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                我們來看一個示例,代碼如下所示: **Sample** ~~~ final void performPaste() { //獲取ClipboardManager對象 ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); //獲取ContentResolver對象 ContentResolver cr = getContentResolver(); //從剪貼板中取出ClipData ClipDataclip = clipboard.getPrimaryClip(); if (clip!= null) { String text=null; String title=null; //取剪切板ClipData中的第一項Item ClipData.Item item = clip.getItemAt(0); /* 下面這行代碼取出Item中所包含的Uri。看起來順理成章,其實不然。 應思考這樣一個問題,為什么這里一定是取Uri呢?原因是在本例中, copy方和paste方都事先了解ClipData中的數據類型。 如果paste方不了解ClipData中的數據類型,該如何處理? 一種簡單的方法就是采用if/else的判斷語句。另外還有別的方法, 下文將做分析。 */ Uriuri = item.getUri(); Cursor orig = cr.query(uri,PROJECTION, null, null,null); ......//查詢數據庫并獲取信息 orig.close(); } } if(text == null) { //如果paste方不了解ClipData中的數據類型,可調用coerceToText //函數,強制得到文本類型的數據 text = item.coerceToText(this).toString();//強制為文本 } ...... } ~~~ 下面來分析getPrimaryClip函數。 **ClipboardManager.java** ~~~ public ClipData getPrimaryClip() { try { //調用CBS的getPrimaryClip,并傳遞自己的package名 return getService().getPrimaryClip(mContext.getPackageName()); }...... } ~~~ **ClipboardManagerService.java** ~~~ public ClipData getPrimaryClip(String pkg) { synchronized (this) { //賦予該pkg相應的權限,后文再作分析 addActiveOwnerLocked(Binder.getCallingUid(), pkg); return mPrimaryClip;//返回ClipData給客戶端 } } ~~~ 在上邊的代碼注釋中,曾提到coerceToText函數。該函數在paste方不了解ClipData中數據類型的情況下,可以強制得到文本類型的數據。對于URI和Intent,這個功能又是如何實現的呢?來看下面的代碼: **ClipData.java** ~~~ public CharSequence coerceToText(Context context){ //如果該Item已經有mText,則直接返回文本 if (mText!= null) { return mText; } //如果該Item中的數據是URI類型 if (mUri!= null) { FileInputStream stream = null; try{ /* ContentProvider需要實現openTypedAssetFileDescriptor函數, 以返回指定MIME(這里是text/*)類型的數據源(AssetFileDescriptor) */ AssetFileDescriptor descr = context.getContentResolver() .openTypedAssetFileDescriptor(mUri, "text/*", null); //創建一個輸入流 stream = descr.createInputStream(); //創建一個InputStreamReader,讀出來的數據將轉換成UTF-8的文本 InputStreamReader reader = new InputStreamReader(stream, "UTF-8"); StringBuilder builder = new StringBuilder(128); char[] buffer = new char[8192]; int len; //從ContentProvider那讀取數據,然后轉換成UTF-8的字符串 while ((len=reader.read(buffer)) > 0) { builder.append(buffer, 0, len); } //返回String return builder.toString(); } ...... } //如果是Intent,則調用toUri返回一個字符串 if (mIntent != null) { returnmIntent.toUri(Intent.URI_INTENT_SCHEME); } return""; } } ~~~ 分析上邊代碼可知,針對URI類型的數據,coerceToText函數還是做了不少工作的。當然,還需要提供該URI的ContentProvider實現相應的函數。
                  <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>

                              哎呀哎呀视频在线观看