libgdx中异步从网络加载图片

2012年3月30日 没有评论

使用libgdx从网络中下载图片,并转换为texture画出来。其实并不复杂,只需要四步就可以了。

1、从网络中读取图片数据到byte[]

2、使用byte[]生成一个pixmap

3、将pixmap画到一张边长是2的N次幂的texture上

4、从texture构造textureRegion

阅读全文…

分类: android 标签: , , , ,

java的http请求(get\post\上传文件)(附源码下载)

2012年3月24日 没有评论

使用标准http协议实现,(HttpUrlConneciton),不使用第三方包

一、get请求
URL url=new URL(“http://www.baidu.com/s?wd=abcdefg”);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream is = conn.getInputStream();
is.read(…..
二、简单post请求
只需要将参数用 & 和 = 连接,然后用流写出去就行了。
URL url=new URL(“http://www.baidu.com/s”);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream out=conn.getOutputStream();
out.write(“wd=abcdefg&wd2=hijklmn”.getBytes());
out.flush();
out.close();
InputStream is = conn.getInputStream();
is.read(…..
三、上传多文件
比如实现如下请求
参数:
name=zzp
age=23
文件:
icon=new File(file1);
music=new File(audio);
需要向服务器发送的数据如下:
首先需要定义一个boundary,一个随机字符串即可,但整个请求过程中需要是一致的。
BOUNDARY=”abcdefg”;
首先需要
conn.setRequestProperty(“Content-Type”,”multipart/form-data;boundary=abcdefg”);
全部数据请求如下(包括内容中的引号。包括所有换行与空行,换行符是\r\n)(两个横线之间的是需要发送的全部内容):
排版很麻烦。。换行总是被去掉,所以以下用[\r\n]表示换行,程序中直接往流里写\r\n就行了。

–abcdefg[\r\n]
Content-Disposition:form-data;name=”name”[\r\n]
[\r\n]
zzp[\r\n]
–abcdefg[\r\n]
Content-Disposition:form-data;name=”age”[\r\n]
[\r\n]
23[\r\n]
–abcdefg[\r\n]
Content-Disposition:form-data;name=”icon”;filename=”file1其实这个是随便的”[\r\n]
Content-Type:image/png[\r\n]
[\r\n]
file1.getBytes()[\r\n]
–abcdefg[\r\n]
Content-Disposition:form-data;name=”music”;filename=”mymusic.mp3″[\r\n]
Content-Type:audio/mpeg[\r\n]
[\r\n]
audio.getBytes()[\r\n]
–abcdefg–

源码下载:
分类: Java 标签: , , , , , ,

读取apk程序包的内容

2012年2月21日 没有评论

一、对于已安装应用,只需要getPackageManager().getInstalledPacked(int flags)即可得到PackageInfo.

packageInfo.applicationInto中可以得到所有信息。
注:区别系统应用和用户应用:applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM
二、对于未安装应用(apk文件)
使用packageManager.getPackageArchiveInfo(String filePath,int flags),只能得到部分信息。
所有int形式的资源(label,icon等)都是无法得到的,需要使用反射机制用到隐藏接口
方法如下:
Resources res=getResources();
AssetManager asm=new AssetManager();//隐藏api
asm.addAssetPath(String apkfilePath);//隐藏api
res=new Resources(asm,res.getDisplayMetrics(),res.getConfiguration());//隐藏api
然后使用res.getString(int resId)   res.getDrawable(int resId)即可得到apk文件内部的资源。(此处资源id可通过上面的公开方法得到)
关键点就在于assetManager.addAssetPath(String apkfilePath)此方法。
现在要做的就是使用反射机制实现上面的隐藏api。
具体反射实现代码如下:
Class asm_cls = Class.forName("android.content.res.AssetManager");
Object asm_obj = asm_cls.getDeclaredConstructor((Class[]) null).newInstance((Class[]) null);
asm_obj.getClass()	.getDeclaredMethod("addAssetPath", new Class[] { String.class })
				.invoke(asm_obj, new Object[] { filePath });
Resources res=getResources();
res = Resources.class.getDeclaredConstructor(
				new Class[] { asm_obj.getClass(),
		                res.getDisplayMetrics().getClass(),
		                res.getConfiguration().getClass() })
    .newInstance(new Object[] { asm_obj,
                                                    res.getDisplayMetrics(),
						    res.getConfiguration() });
return res;
res.getString(applicaiontInfo.labelRes);
res.getDrawable(applicationInfo.icon);

ANDROID应用内截图的代码实现

2012年2月19日 没有评论

方法一:

View view= getWindow().getDecorView();

Bitmap bmp = Bitmap.createBitmap(480, 800, Bitmap.Config.ARGB_8888);

view.draw(new Canvas(b));

bmp就是截取的图片了,可通过bmp.compress(CompressFormat.PNG, 100, new FileOutputStream(file));把图片保存为文件。

 

方法二:

getWindow().getDecorView().setDrawingCacheEnabled(true);

bmp=getWindow().getDecorView().getDrawingCache();

 

但这样得到的图片是包含状态栏和标题栏的,如果想把状态栏和标题栏去掉,可把得到的图片顶部一部分剪裁掉。

1、得到状态栏高度

Rect rect = new Rect();

view.getWindowVisibleDisplayFrame(rect);

int statusBarHeight = rect.top;

System.out.println(“状态栏高度:” + statusBarHeight);

 

2、得到标题栏高度

int wintop = getWindow().findViewById(android.R.id.content).getTop();

int titleBarHeight = wintop – statusBarHeight;

System.out.println(“标题栏高度:” + titleBarHeight);

 

 

注:这样得到的截图是不会包含dialog和popupwindow的,你必须单独得到popupwindow的截图,然后再和背景截图合到一起。

另外,截图的相关代码是不能放到oncreate中的,因为这时候getDectorView()得到的是null

 

 

把两个bitmap合到一起的方法很简单。

Bitmap bmpall=Biatmap.createBitmap(width,height,Config.ARGB_8888);

Canvas canvas=new Canvas(bmpall);

canvas.drawBitmap(bmp1,x,y,paint);

canvas.drawBitmap(bmp2,x,y,paint);

得到的bmpall就是合在一起的图片了。

 

ps:按理说也getWindow.findViewById(android.R.id.content)得到的view就是不包含状态栏和标题栏的view,但这个我还没有试过。

分类: android 标签: , ,

终于搞定了wordpress的评论回复邮件通知插件

2011年10月29日 2 条评论

用过各种各样的邮件插件和评论回复邮件通知的插件,总是没有找到完美的,都会有这样或那样的问题。

这次下决心要把问题搞好,算起来总花了一天多时间。把经验分享一下,免得朋友们走弯路。

阅读全文…

wordpress发邮件出现Could not connect to SMTP host的解决办法(转载)

2011年10月26日 3 条评论

很多php主机都禁用了mail()函数,所以一般找一个smtp的插件来完成发送邮件的工作。

wp-mail-smtp这个插件不错,但可能很多人都遇到过 could not connect to SMTP host的错误。

这个问题纠结很久,网上到处找,遇到这个问题的人也很多,后来终于找到了一篇文章介绍的解决办法。

阅读全文…

android上传文件的同时并传递参数(php服务端源码)

2011年10月26日 2 条评论

之前写的   android上传文件的同时并传递参数   的文章

今天有位朋友要php端的代码,现在帖出来吧。

其实如果你也可以直接用我写好的一个 http://veikr.com/myupload/upload.php 来测试

刚才去看了下,有人用过,传了4个文件在里面。

阅读全文…

解决xampp带的apache启动提示80端口被占用问题

2011年10月26日 没有评论

启动xampp中的apache

提示busy 80 .  apache started.

事实上并没有启动。

然后去apache/conf/httpd.conf文件里改了端口,可仍然是这样的提示

在网上找了好久

都说端口被占用换端口 删注册表啥的 问题都没有解决

后来终于摸索出了解决办法。

因为我之前一直用的好好的,突然不行的

后来就回想这期间干了什么

后来终于发现了问题,是系统环境变量的问题

之前装了crul,并加到了环境变量中

去掉就行了。

(即使换了端口,xampp里显示的仍是80端口)

改环境变量很简单吧

我的电脑右键-属性-高级-环境变量

下面的系统变量部分,更改path值就行了。

监听android的拨号事件(android secret code)

2011年10月25日 没有评论

这是个比较冷门的东西,简单的说就是当你在拨号盘输入*#*#xxxx#*#*的时候接到通知,然后可以进行相关操作。

首先能想到的应用就是私密类程序。比如你的程序是没有图标的,用户输入这些暗号后可以进行一些操作,或者进入软件界面。

原理很简单,其实也是一个broastcastReceiver而已,只是action并没有放到Intent的常量中,所以很少有人知道。

阅读全文…

得到所有音乐

2011年9月7日 没有评论

在做android音乐播放器吗?还在扫描目录吗?

不需要啦,直接可以通过系统接口得到手机内的所有音乐哦。

而且会帮你解析好id3歌曲信息

阅读全文…