android 浏览器插件开发 - HelloPlugin
来源:互联网 发布:java程序员培训价格 编辑:程序博客网 时间:2024/05/29 12:32
转载请注明出处:http://blog.csdn.net/awebkit
这一讲我们一起来编写一个简单的浏览器插件 - HelloPlugin
java部分:AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.helloplugin" android:versionCode="1" android:versionName="1.0"> <uses-permission android:name="android.webkit.permission.PLUGIN"/> <uses-sdk android:minSdkVersion="3" /> <application android:icon="@drawable/hello_browser_plugin" android:label="@string/hello_browser_plugin"> <service android:name=".HelloPlugin"> <intent-filter> <action android:name="android.webkit.PLUGIN" /> </intent-filter> <meta-data android:name="type" android:value="native" /> </service> </application></manifest>HelloPlugin.java代码
package com.example.helloplugin;import android.app.Service;import android.content.Intent;import android.os.IBinder;public class HelloPlugin extends Service { @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } }
c代码部分。保留main.cpp, main.h, PluginObject.h, PluginObject.cpp,稍微作一些修改。
修改Android.mk,仿照原来的例子。
增加hello/HelloPlugin.h hello/HelloPlugin.cpp。这个函数要实现的API有两个
virtual bool supportsDrawingModel(ANPDrawingModel); virtual int16 handleEvent(const ANPEvent* evt);我简单实现的HelloPlugin.cpp代码如下
#include "HelloPlugin.h"extern ANPLogInterfaceV0 gLogI;extern ANPCanvasInterfaceV0 gCanvasI;///////////////////////////////////////////////////////////////////////////////HelloPlugin::HelloPlugin(NPP inst) : SubPlugin(inst) { // gLogI.log(kDebug_ANPLogType, "HelloPlugin created..."); //register for touch events ANPEventFlags flags = kTouch_ANPEventFlag; NPError err = browser->setvalue(inst, kAcceptEvents_ANPSetValue, &flags); if (err != NPERR_NO_ERROR) { gLogI.log(kError_ANPLogType, "Error selecting input events."); }}HelloPlugin::~HelloPlugin(){ //}bool HelloPlugin::supportsDrawingModel(ANPDrawingModel model) { return (model == kBitmap_ANPDrawingModel);}void HelloPlugin::drawPlugin(const ANPBitmap& bitmap, const ANPRectI& clip) { // create a canvas ANPCanvas* canvas = gCanvasI.newCanvas(&bitmap); // clip the canvas ANPRectF clipR; clipR.left = clip.left; clipR.top = clip.top; clipR.right = clip.right; clipR.bottom = clip.bottom; gCanvasI.clipRect(canvas, &clipR); // paint the canvas (using the path API) gCanvasI.drawColor(canvas, 0xFF0000FF); // delete the canvas gCanvasI.deleteCanvas(canvas);}int16 HelloPlugin::handleEvent(const ANPEvent* evt) { NPP instance = this->inst(); switch (evt->eventType) { case kDraw_ANPEventType: switch (evt->data.draw.model) { case kBitmap_ANPDrawingModel: gLogI.log(kDebug_ANPLogType, "We should draw plugin !!!!!!!!"); drawPlugin(evt->data.draw.data.bitmap, evt->data.draw.clip); return 1; default: break; // unknown drawing model } case kTouch_ANPEventType: if (kDown_ANPTouchAction == evt->data.touch.action) { gLogI.log(kDebug_ANPLogType, "touch event occurs!!!!!!!!"); } return 1; default: break; } return 0; // unknown or unhandled event}
是不是很简单?
插件的实现还是比较简单的,我们只要深入理解了NPAPI,然后在合适的时机实现需要的功能即可
- android 浏览器插件开发 - HelloPlugin
- android 浏览器插件开发 - HelloPlugin
- Android浏览器插件开发
- Android浏览器插件开发
- Android浏览器插件开发
- Android浏览器插件开发
- Android浏览器插件开发
- Android浏览器插件开发
- Android浏览器插件开发
- Android浏览器插件开发
- Android 浏览器插件开发
- Android浏览器插件开发
- Android浏览器插件开发
- android 浏览器插件开发
- Android浏览器插件开发-Log
- android 浏览器插件开发 - 插件库
- Android 浏览器插件开发-插件库
- android 浏览器插件开发 - 插件库
- SQL SERVER临时表的使用
- Java中 每个类在没有声明构造方法的前提下,会自动生成一个不带参数的构造方法
- SEH
- 看看baidu是如何AJAX跨域的
- 实际开发中体会到的技巧(连载)
- android 浏览器插件开发 - HelloPlugin
- 用img标签实现数据提交
- jetspeed2中的portlet开发
- Linux安装JDK详细步骤
- osggis中重新投影数据
- DBA推荐的7法宝提高SQL查询性能
- eclipse--常用--快捷键
- 23日维护--悲剧与教训
- Android设计模式之Builder