文档章节

如何从Windows应用发送通知消息给Android应用

yushulx
 yushulx
发布于 2014/10/13 13:57
字数 478
阅读 480
收藏 6

行业解决方案、产品招募中!想赚钱就来传!>>>

手机应用可以作为桌面应用的辅助工具,用来接收桌面应用的状态信息。这里介绍如何实现一个简单的Android程序用于接收Windows扫描仪应用的工作状态。

参考:How to Push Notifications to Android Applications from Windows

思路

  1. 创建socket连接用于应用通信

  2. Android上启动后台服务,用于接收信息

  3. 在收到信息之后,后台服务会把推送消息发送给Android应用

Socket信息发送

使用TCPListener来创建socket连接,相关内容可以参考:Wireless TWAIN Document Scanning on Android

启动停止Android Service

创建服务NotificationService

public class NotificationService extends Service {
 
    @Override
    public void onCreate() {
    }
 
    @Override
    public void onDestroy() {
    }
 
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }
 
    private final IBinder mBinder = new Binder() {
        @Override
        protected boolean onTransact(int code, Parcel data, Parcel reply,
                int flags) throws RemoteException {
            return super.onTransact(code, data, reply, flags);
        }
    };
}
 

AndroidManifest.xml中申明一下这个service:

<
service android:name = "com.dynamsoft.twain.NotificationService" 
/>

onCreate(Bundle)中启动服务:

startService(new Intent(ScanAssist.this, NotificationService.class));

onDestroy()中停止服务:

stopService(new Intent(ScanAssist.this, NotificationService.class));

推送Android通知

调用NotificationManager

private NotificationManager mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

创建用于内容显示的Activity IncomingMessageView

public class IncomingMessageView extends Activity {
 
    public static final String KEY_FROM = "from";
    public static final String KEY_MESSAGE = "message";
    public static final int NOTIFICATION_ID = R.layout.activity_main;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView view = new TextView(this);
        view.setText(getIntent().getCharSequenceExtra(KEY_FROM) + ": " + getIntent().getCharSequenceExtra(KEY_MESSAGE));
 
        setContentView(view);
 
        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        nm.cancel(NOTIFICATION_ID);
    }
}
 

AndroidManifest.xml中申明Activity:

<activity
            android:name="com.dynamsoft.twain.IncomingMessageView"
            android:label="@string/app_name" >
</activity>
 

发送消息,并显示在状态栏上:

Intent notifyIntent = new Intent(this, IncomingMessageView.class);
notifyIntent.putExtra(IncomingMessageView.KEY_FROM, from);
notifyIntent.putExtra(IncomingMessageView.KEY_MESSAGE, message);
 
PendingIntent pendingIntent =
        PendingIntent.getActivity(
        this,
        0,
        notifyIntent,
        PendingIntent.FLAG_ONE_SHOT
);
 
Notification notif = new Notification.Builder(this)
.setContentTitle("TWAIN Scanner Status ")
.setContentText(message)
.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(pendingIntent)
.setTicker(message)
.build();
 
notif.defaults = Notification.DEFAULT_ALL;
 
mNM.notify(IncomingMessageView.NOTIFICATION_ID, notif);
 

用例

  1. 运行Android应用,启动服务

  2. 应用切换到后台,操作其它应用,比如打开浏览器

  3. 在Windows上操作应用,点击文件扫描

  4. 扫描成功之后,信息发送到手机

源码

https://github.com/DynamsoftRD/ScanAssist

git clone https://github.com/DynamsoftRD/ScanAssist.git


yushulx
粉丝 30
博文 127
码字总数 74651
作品 0
杭州
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.5K
6
浅入浅出Android(003):使用TextView类构造文本控件

基础: TextView是无法供编辑的。 当我们新建一个项目MyTextView时候,默认的布局(/res/layout/activity_main.xml)中已经有了一个TextView: <TextView 运行效果如下: 修改其文本内容...

樂天
2014/03/22
664
1
Swift百万线程攻破单例(Singleton)模式

一、不安全的单例实现 在上一篇文章我们给出了单例的设计模式,直接给出了线程安全的实现方法。单例的实现有多种方法,如下面: class SwiftSingleton { } 这段代码的实现,在shared中进行条...

一叶博客
2014/06/20
3.4K
16
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22

没有更多内容

加载失败,请刷新页面

加载更多

Azure Application Gateway(一)对后端 Web App 进行负载均衡

一,引言   今天,我们学习一个新的知识点-----Azure Application Gateway,通过Azure 应用程序网关为我么后端的服务提供负载均衡的功能。我们再文章头中大概先了解一下什么是应用程序网关...

osc_lc4icfkt
33分钟前
4
0
WoLai(我来) 注册码 ——国内版 notion 【笔记】

注册码: SQGYG23 ❤ W4T9PKP JLTHNJP KMTXK7P JDHKJEM KRJXX5P 6M7PPAP DEGLMG3 N3BZMRI 87BR22I GSIWGWP GNGBNTI QA8URIM UDUV9VM IHKJA7P MD9ZA3M 3XR67ZI TBUP9JX TI4TYMM 注册完了可以把......

osc_c05lkk3u
34分钟前
15
0
2020hdu多校第二场比赛及补题

这一场我们队只A了一题 1010 Lead of Wisdom 直接爆搜,但是T了好几发,剪了下枝 如果一个物品的a,b,c,d都比不上另外一个同种物品的a,b,c,d,那这个物品就可以直接淘汰掉了 #include<iostrea...

osc_usgpahnw
35分钟前
21
0
为什么Java有瞬态字段? - Why does Java have transient fields?

问题: 为什么Java有瞬态字段? 解决方案: 参考一: https://stackoom.com/question/3opS/为什么Java有瞬态字段 参考二: https://oldbug.net/q/3opS/Why-does-Java-have-transient-fields...

富含淀粉
35分钟前
16
0
轻松搭建CAS 5.x系列(6)-在CAS Server上增加OAuth2.0协议

概述说明 CAS Server默认搭建出来,客户端程序只能按照CAS自身的协议接入。CAS的强大在于,有官方的插件,可以支持其他的协议。本章节就让CAS Server怎么增加OAuth2.0的登录协议。 安装步骤 ...

osc_inj0cicw
37分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部