Posts

Showing posts from 2013

Share file(s) using Intent

public void startSendToIntent(String packageName, String className, String mimetype, String urls) { // urls: "/storage/sdcard0/file1.mp4;/storage/sdcard0/file2.mp4;" // mimetype: "video/mp4" /* All url using ";" as the divider */ String[] urlArray = urls.split(";"); ArrayList uris = new ArrayList (urlArray.length); for (int i = 0; i < urlArray.length; i++) { uris.add(Uri.fromFile(new File(urlArray[i]))); } Intent intent = new Intent(); intent.setClassName(packageName, className); intent.setType(mimetype); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); if (uris.size() > 1) { intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.putExtra(Intent.EXTRA_STREAM, uris); } else { intent.setAction(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_STREAM, uris.get(0)); } ...

Play video inside OpenGL ES by using MediaCodec

In Android 4.1 (API 16) and above, MediaCodec is introduced by Android. By using MediaCodec, we can easily decode video without using Android NDK, like creating video playback application, etc. In game development, video is also needed to make the game environment more realistics, like when you are playing a racing game with video banner around the track. In here, I'll introduce of how to decode the video and render it into OpenGL ES. Firstly, we prepare some stuffs to decode the video, like MediaExtractor and MediaCodec. private boolean initExtractor() { extractor = new MediaExtractor(); try { extractor.setDataSource(mFilePath); } catch (IOException e) { return false; } // get video track for (int i = 0; i &lt; extractor.getTrackCount(); i++) { MediaFormat format = extractor.getTrackFormat(i); String mime = format.getString(MediaFormat.KEY_MIME); if (mime.startsWith(&quot;video/&quot;)) { ...

Check OpenGL ES capability on Android

There are lots of Android devices around the world. And when you want to create one application that need OpenGL ES, you would think (what I thought) if the user's device can run smoothly by checking the OpenGL ES version because this is important. So how to check the OpenGL ES version? By using SystemService. This is the simplest one. You don't need to create any OpenGL ES component. final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo(); final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x30000; By using glGetService . By doing this, you can get more information, like the vendor, chip, shading version, etc. But, you need to have GL context first. String glVersion = GLES20.glGetString(GLES20.GL_VERSION); String glRenderer = GLES20.glGetString(GLES20.GL_RENDERER); String glVendor = GLES20.glGetString(GLES20.GL_VENDOR); String g...

Android, OpenGL ES 3.0, GPU

Previously, I've posted OpenCL GPU supported . You can see that mobile GPU is going to be more powerful and more efficient. When investigating the OpenGL related information, I found that OpenGL ES 3.0 is started to be supported by many GPU vendors.  Also, Android 4.3 is released with OpenGL ES 3.0 . Before you are going to creating OpenGL ES 3.0 app, first, you have to know which mobile GPUs that support OpenGL ES 3.0. Below is the list that I found, also with the chip: Imageon Adreno 300 series Qualcomm:  Snapdragon 600 ,  Snapdragon 800 Samsung Galaxy S4 ,  Sony Xperia Z Ultra, HTC New One Mali T-600 series Samsung: Exynos 5 Samsung Galaxy S4 Rockchip:  RK32xx PowerVR Series 6 (Rogue) MTK: MT8135 Apple A5, A5X, A6, A6X Samsung Exynos 5 Octa - SGX544MP3 Tegra 4 ( WhitePaper PDF ) NOT fully support. HP Slatebook x2 Please let me know if you know more. Thanks for watching :) To check OpenGL ES version on your device, click here .

Android OS History - Big changes

After developing Android app for two years, I figured out Android OS has became better and better. Indeed, I found the history and figured out the big changes for each version. See below for these big changes. Beta: 5 November 2007, as Android birthday date. v1.0 Support camera. Support Wifi. Support Bluetooth. v1.1 HTC Dream, as first Android device. v1.5, Cupcake Support video record and playback in MPEG-4 & 3GP formats. v1.6, Donut Support gesture touch. v2.0, Eclair Support Bluetooth 2.1. Support more screen size. Improve gesture to multi-touch. v2.0.1, Eclair v2.1, Eclair v2.2-2.2.3, Froyo (frozen yogurt) Improve speed, memory, performance. Use JIT compilation. Support Adobe Flash. v2.3-2.3.2, Gingerbread Support NFC. Support AAC encode. Support more sensors (gyroscopes and barometer). Improve power management. Improve audio, graphical, input for gaming. Change ext4 file system from YAFFS. v2.3.3-2.3.7, Gingerbread Improve battery efficie...

Download image as Bitmap

Sometimes, we need to download image and show to ImageView. Therefore, it needs some Http API to do so. Below is the code of how to download image using Http API and set it as Bitmap. Bitmap downloadBitmap(String link) { try { URL url = new URL(link); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); Bitmap myBitmap = BitmapFactory.decodeStream(input); return myBitmap; } catch (IOException e) { e.printStackTrace(); Log.e("getBmpFromUrl error: ", e.getMessage().toString()); return null; } } To use it, you NEED to create a thread because it is restricted on using Http on UI thread. Thread t = new Thread(new Runnable() { @Override public void run() { Bitmap getdownload = downloadBitmap("http://lh5.ggpht.com/_hepKlJWopDg/TB-_WXikaYI/AAAAAAAAElI/7...

Adding source code syntax highlight

To do so, you just need to include the codes below into your template by editing the Template from  Edit HTML . <link href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" rel="stylesheet" type="text/css"> <link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" rel="stylesheet" type="text/css"> <script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript"> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type=...

Android, OpenCL, GPU

GPU, Graphics Processing Unit , is the master of the graphics performance on our Android device.It plays an important role when playing games, playing high quality video (HD), and even showing smooth UI. Therefore, it needs to support many rendering libraries, like OpenGL ES, OpenCV, OpenVG, etc. It seems that GPU on our Android device is performing the same role as our VGA on PC. But, Android is just growing faster recently, so do all GPUs device support all those libraries? After investigating by reading lots of articles, etc, I figured out that GPU on our Android device are still limited. Few GPUs supports OpenCL library. And what does OpenCL really do? OpenCL, Open Computing Language , is recently used for non-graphical computing, like image processing, vector computation, matric computation, etc. See sample from Nvidia for more details by clicking here . Here are Android GPUs that support OpenCL. Qualcomm (Adreno 300 series) References: https://developer.qualcomm.com/...

Android Source Code

Android 2.3.3 Gingerbread: http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/2.3.3_r1/ Android 4.0.3 IceCreamSandwich: http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/ Android 4.2.2 JellyBean: http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/

Configure Linksys WRT400N as an access point

The WRT400N is a rather basic router so I use another router with more memory and a faster processor to connect to the internet. I had originally configured the 400N on its own subnet. Today I tried configuring it to be on the same subnet as my main router. I found useful advice here: http://homecommunity.cisco.com/t5/Wireless-Routers/How-to-configure-WRT400n-as-an-access-point/m-p/277101/highlight/true#M144970 To summarize: Turn off DHCP Server on the 400N  still want the 400N to get it's IP via DHCP  Turn of NAT and the stateful fire wall settings  not sure this is essential after you move the Ethernet cable below.  NAT is in Setup, Advanced Routing  Stateful fire wall is in Security as SPI Firewall protection  be sure the Network Setup shows the same subnet mask as your main router.  I set the IP address to the address reserved for the 400N on the other router.  some suggest using a class C address you are _not_ using.  save your setting...