博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过 ANE(Adobe Native Extension) 启动Andriod服务 推送消息(一)
阅读量:5108 次
发布时间:2019-06-13

本文共 4188 字,大约阅读时间需要 13 分钟。

 项目组用air来开发手游, 但有些在原生应用里很容易实现的功能没有办法在air中直接调用,比如说震动,服务等等。但Adobe 提供了一种方法让air间接调用本地代码(java,object-c...),就是接下来要介绍的ANE(Adobe Native Extension) 也叫本地扩展。

 查了下资料,早在2011年11月 Adobe 官方就发一篇介绍ANE的文章附一个简单的例子, 在去年八月份Adobe 开发者中心 开始发一系列较为详尽的文章, 有兴趣可以阅读下:

一、 HellAndriod Service

  先看一个原生态的android例子:

package com.wenbo.helloandriod;import android.app.Notification;public class BackgroundService extends Service {    private NotificationManager notificationMgr;    private Thread mthr;    private int mCount=0;    private Boolean mSend=true;    @Override    public void onCreate() {        super.onCreate();        notificationMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);        displayNotificationMessage("starting Background Service");                if(mthr == null || mSend == false)         {            mSend=true;            mthr = new Thread(null, new ServiceWorker(), "Background Service");            mthr.start();        }            }        @Override    public void onDestroy()    {        super.onDestroy();        mSend = false;    }    @Override    public IBinder onBind(Intent arg0) {        // TODO Auto-generated method stub        return null;    }        class ServiceWorker implements Runnable {        @Override        public void run() {            // do background processing here.....            // stop the service when done...            // BackgroundService.this.stopSelf()            while(mSend)            {                try{                    Thread.sleep(1000);                    Log.d("", "runnable" + mCount);                    displayNotificationMessage("runnable" + mCount);                }                catch (InterruptedException e)                {                    e.printStackTrace();                }            }        }    }    private void displayNotificationMessage(String message) {        Log.d("", message);        mCount++;        @SuppressWarnings("deprecation")        Notification notification = new Notification(R.drawable.ic_launcher, message,                System.currentTimeMillis());                PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0);                notification.setLatestEventInfo(this, "女神之贱", message, contentIntent);                notificationMgr.notify(R.id.app_notification_id, notification);    }}

在服务里开个线程,每隔一秒发一个后台通知。 然后我们建立一个入口启动它。

package com.wenbo.helloandriod;import android.os.Bundle;public class MainActivity extends Activity {    private static final String TAG = "MainActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                Log.d(TAG, "starting service");                Button bindBtn = (Button) findViewById(R.id.start);        bindBtn.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                startService(new Intent(MainActivity.this,                        BackgroundService.class));             }        });                Button unbindBtn = (Button) findViewById(R.id.stop);        unbindBtn.setOnClickListener(new OnClickListener() {                        @Override            public void onClick(View v) {                // TODO Auto-generated method stub                stopService(new Intent(MainActivity.this, BackgroundService.class));            }        });    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }}

做完这些,别忘了配置权限, 在AndroidManifest.xml的<activity></activity>后面添加

安装到模拟器上或真实机器上 打开程序启动后就可以看到每隔一秒后台消息便会更新一次。按下stop后停止更新。

好了,下一节我将要按照ANE的要求改造它。

由于不能上传附件,我将另两个关键文件也贴出来。

一个是res/layout/activity_main.xml

另一个是AndroidManifest.xml

转载于:https://www.cnblogs.com/Free-Thinker/p/3273202.html

你可能感兴趣的文章
mysql基础语句
查看>>
Oracle中的rownum不能使用大于>的问题
查看>>
cassandra vs mongo (1)存储引擎
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
遍历Map对象
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
#Leetcode# 209. Minimum Size Subarray Sum
查看>>
SDN第四次作业
查看>>
DM8168 DVRRDK软件框架研究
查看>>
django迁移数据库错误
查看>>
yii 跳转页面
查看>>
洛谷 1449——后缀表达式(线性数据结构)
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
(转)Android之发送短信的两种方式
查看>>
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>