android 零星调试笔记(二)

论坛 期权论坛     
选择匿名的用户   2021-6-2 16:29   272   0
<p>续上篇:http://blog.csdn.net/jimbo_lee/article/details/8694265</p>
<h3>通过包名获取其他包的Context实例</h3>
<p>Context有个createPackageContext方法,可以创建另外一个包的上下文,这个实例不同于它本身的Context实例,但是功能是一样的。这个方法有两个参数:<br> 1。packageName  包名,要得到Context的包名<br> 2。flags  标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。</p>
<h3>java语言中byte[]与十六进制字符串转换 </h3>
<pre class="blockcode"><code class="language-java">/**
* bytes转换成十六进制字符串
*/
public static String byte2HexStr(byte[] b) {
String hs &#61; &#34;&#34;;
String stmp &#61; &#34;&#34;;
for(int n &#61; 0; n &lt; b.length; n&#43;&#43;){
stmp &#61; (Integer.toHexString(b[n] &amp; 0XFF));
if(stmp.length() &#61;&#61; 1)
hs &#61; hs &#43; &#34;0&#34; &#43; stmp;
else
hs &#61; hs &#43; stmp;
}
return hs.toUpperCase();
}


/**
* 十六进制字符串转换成bytes
*/
public static byte[] hexStr2Bytes(String src) {
int m &#61; 0, n &#61; 0;
int l &#61; src.length() / 2;
byte[] ret &#61; new byte[l];
for(int i &#61; 0; i &lt; l; i&#43;&#43;){
m &#61; i * 2 &#43; 1;
n &#61; m &#43; 1;
ret[i] &#61; uniteBytes(src.substring(i * 2, m), src.substring(m, n));
}
return ret;
}

private static byte uniteBytes(String src0,String src1) {
byte b0 &#61; Byte.decode(&#34;0x&#34; &#43; src0).byteValue();
b0 &#61; (byte) (b0 &lt;&lt; 4);
byte b1 &#61; Byte.decode(&#34;0x&#34; &#43; src1).byteValue();
byte ret &#61; (byte) (b0 | b1);
return ret;
} </code></pre>
<p>在处理byte数组与字符串转换的时候,可以使用中间类型十六进制字符串。 </p>
<p>附:    java中 byte字符处理</p>
<pre class="blockcode"><code class="language-java">/**
*将字节数组补成8的倍数,以0填充;
*/
public static byte[] addZerosForDes(byte[] source)
{
byte [] ret &#61; null;
if(source&#61;&#61;null || source.length%8&#61;&#61;0)
ret &#61; source;
else
{
int i &#61; source.length&#43;8-source.length%8;
ret &#61; new byte[i];
System.arraycopy(source,0,ret,0,source.length);
}
return ret;
}

/**
*将字节数组末尾的0去掉(小于8位);
*/
public static byte[] removeZerosForDes(byte[] encoding) {
byte[] ret &#61; null;
if (encoding !&#61; null &amp;&amp; encoding.length &gt; 0) {
int i &#61; encoding.length;
while (i-1&gt;&#61;0) {
if (encoding[i - 1] !&#61; (byte) 0)
break;
i--;
}
ret &#61; new byte[i];
System.arraycopy(encoding, 0, ret, 0, i);
}
return ret;
} </code></pre>
<h3> </h3>
<h1 style="margin-left:0px;"> </h1>
<h3> </h3>
<h3> </h3>
<h3> </h3>
<h3> </h3>
<h3>如何判断字符串是否可以转换成数字</h3>
<p><code>str.matches(</code><code>&#34;\\d&#43;&#34;</code><code>); </code><code>// int</code></p>
<p><code>str.matches(</code><code>&#34;\\d&#43;(\\.)?(\\d&#43;)?&#34;</code><code>); </code><code>// double or float</code></p>
<p> </p>
<h3>把bitmap图片转换成byte[]数据</h3>
<p>InputStream inputStream &#61; resource.openRawResource(resId);  <br> Bitmap bitmap &#61; BitmapFactory.decodeStream(inputStream);</p>
<p>byte[] bitmapBuffer &#61; bitmap2ByteArray(bitmap);</p>
<pre class="blockcode"><code class="language-java">public static byte[] bitmap2ByteArray(Bitmap bitmap) {
  int height &#61; bitmap.getHeight();
  int width &#61; bitmap.getWidth();

  byte[] tmpBuf &#61; new byte[(height / 8 &#43; 1) * width &#43; 1];
  int[] p &#61; new int[8];
  int t &#61; 0;
  for (int x &#61; 0; x &lt; width; x&#43;&#43;) {
   for (int y &#61; 0; y &lt; height; y &#43;&#61; 8) {
    for (int m &#61; 0; m &lt; 8; m&#43;&#43;) {
     if (y &#43; m &gt;&#61; height){
      p[m] &#61; 0;
     }else {
      p[m] &#61; (bitmap.getPixel(x, y &#43; m) &#61;&#61; -1 ? 0 : 1);
     }
    }
    int value &#61; p[0] * 128 &#43; p[1] * 64 &#43; p[2] * 32 &#43; p[3] * 16 &#43; p[4] * 8 &#43; p[5] * 4 &#43; p[6] * 2 &#43; p[7];
    tmpBuf[(&#43;&#43;t)] &#61; ((byte) value);
   }
  }
  byte[] realBuf &#61; new byte[t &#43; 1];
  for (int i &#61; 0; i &lt; t &#43; 1; i&#43;&#43;) {
   realBuf[i] &#61; tmpBuf[i];
  }
  return realBuf;
}</code></pre>
<p> </p>
<h3>NDK开发中 在native方法中使用logcat:</h3>
<p> </p>
<pre class="blockcode"><code class="language-java">第一步:在对应的mk文件中加入:LOCAL_LDLIBS :&#61; -llog
第二步:在要使用LOG的cpp文件中加入:
#include &lt;android/log.h&gt;
第三步:定义各个宏
#define LOG_TAG &#34;nativeRfidUnpack&#34;
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO  , LOG_TAG, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN  , LOG_TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR  , LOG_TAG, __VA_ARGS__)
第四步:使用
LOGE(&#34;---Java_com_odm_rfid_RfidDevice_nativeDeviceUnpack ---&#34;);</code></pre>
<h3>NDK开发中使用第三方静态库的方法:</h3>
<p> </p>
<pre class="b
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP