android 浏览器插件开发 - HelloPlugin
来源:互联网 发布:手机淘宝2015旧版本 编辑:程序博客网 时间:2024/05/17 09:15
转载请注明出处: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>
- 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);
- #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,然后在合适的时机实现需要的功能即可
0 0
- android 浏览器插件开发 - HelloPlugin
- android 浏览器插件开发 - HelloPlugin
- Android浏览器插件开发
- Android浏览器插件开发
- Android浏览器插件开发
- Android浏览器插件开发
- Android浏览器插件开发
- Android浏览器插件开发
- Android浏览器插件开发
- Android浏览器插件开发
- Android 浏览器插件开发
- Android浏览器插件开发
- Android浏览器插件开发
- android 浏览器插件开发
- Android浏览器插件开发-Log
- android 浏览器插件开发 - 插件库
- Android 浏览器插件开发-插件库
- android 浏览器插件开发 - 插件库
- android 浏览器插件开发 - 流程(1)
- Lucene.net实现搜索
- LINUX C++ 数据库连接池
- Android开发者将越来越有前途
- 采用java链接timesten内存数据库
- android 浏览器插件开发 - HelloPlugin
- 热门同性恋社交网站 看下他们是怎么运营的。
- 深入学习java的HashMap实现原理
- OCP-1Z0-051 补充题库 第6题 SELECT查询语句
- Qt之实现好友列表
- 【Python】decorator的作用
- 56. 2种方法判断二叉树是不是平衡二叉树[is balanced tree]
- 记录如何把服务器误删数据的恢复过程
- OpenCV学习之七: Mat类和vector类之间的转换