Dav*_*ave 5 service notifications android android-intent
我有一个我正在重用的服务(它是一个"绑定"和"启动"服务)在我自己的应用程序中,因为它做了很多我感兴趣的有用的数据获取.一切正常,但我注意到了一个问题.此代码中抛出异常:
Intent dialogIntent = new Intent();
dialogIntent.setClassName(service.getBaseContext(), "com.mycompany.receiver.ui.DialogActivity"); // names changed to protect the innocent
dialogIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
dialogIntent.putExtra("message", message);
service.getApplicationContext().startActivity(dialogIntent);
Run Code Online (Sandbox Code Playgroud)
该例外警告"未知活动"和"你检查了清单".现在,这不是因为我没有将活动放在清单中.事实上,这里确实应该抛出异常,因为我的应用程序没有这个活动!这是为原始应用程序编写的活动.我最初没有注意到它,因为只有当收集的数据超出一定范围时才会触发此代码.我可以更改服务代码,但服务和原始应用程序必须像以前一样继续工作.只是在我的应用程序中,我对于为这个特定消息弹出一个活动并不是特别感兴趣(这对我来说并不重要).
我确实想过这个,我可以在所有东西周围抛出一个try/catch块.但这似乎有点hacky.如果原始应用/服务对中出现其他问题,我想了解它.我提出了以下想法,我需要帮助我指出正确的方向.
我对1-3感兴趣(一般知识和解决这个问题),但2可能是最有用的.毕竟,可能有多个应用程序绑定到该服务,我不确定我是否因为此消息而将原始应用程序带到我自己的前台.最后......忘掉我说的一切,然后4.你怎么解决这个问题?
我在代码中的其他地方有一个非常相似的问题:
Intent toLaunch = new Intent();
toLaunch.setClassName(context, "com.mycompany.receiver.ui.BankingActivity");
toLaunch.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent intentBack = PendingIntent.getActivity(context, 0, toLaunch, PendingIntent.FLAG_CANCEL_CURRENT);
notify.setLatestEventInfo(context, title, message, intentBack);
notifier.notify(NOTIFY_1, notify);
Run Code Online (Sandbox Code Playgroud)
这个没有抛出异常; 它会发出通知,当我点击它时,会启动原始应用程序.这可能实际上是可以的,但是再次,如果没有这个(或者可能是妥协 - 如果应用程序至少绑定,但不一定在前台,则通知通知)可能会很好.思考?
非常感谢,戴夫
你怎么解决这个问题?
你从来没有真正说过"这个"是什么.我猜这个"这个"是:
如果有服务,如何通知我的前台活动,否则提出
Notification(或者根本不做任何事情)?
对于"this",请使用有序广播.正如我在回顾过去的博客文章中写的那样,这里是通知前台活动或提出以下内容的方法Notification:
定义要在事件发生时使用的操作字符串,以便转到活动或通知(例如,com.commonsware.java.packages.are.fun.EVENT).
BroadcastReceiever在您的活动中动态注册a ,IntentFilter设置上述操作字符串并具有正优先级(过滤器的默认优先级为0).然后,此接收器应该让活动执行基于此事件更新UI所需的任何操作.接收者还应该打电话abortBroadcast()以防止其他人获得它.一定要在登记接收器onStart()或onResume()和注销相应的接收器onStop()或onPause()方法.
在您的清单a中注册BroadcastReceiver,并<intent-filter>设置上述操作字符串.这个接收器应该提高Notification.
在您的服务(例如,a IntentService)中,当事件发生时,请致电sendOrderedBroadcast().
如果您只想通知其中一个前台活动,但如果它不在前台,则不执行任何操作,请跳过步骤#3.
有没有办法让服务知道当前正在运行哪些应用程序?
你可以问ActivityManager,但是,坦率地说,那是要求一个脆弱的应用程序.
或者也许目前在前台?
不可靠.
或者目前如何绑定服务?
只有你自己跟踪它.
| 归档时间: |
|
| 查看次数: |
928 次 |
| 最近记录: |