我正在构建一个大型系统的原型应用程序。这个原型将是离线的,但看起来仍然是从服务器获取信息。即使应用程序没有打开(使用DeamonThread)。
因此,我创建了Android应用程序,现在尝试添加一个AI (在应用程序中)来创建和删除任务。它可以工作,但是当我尝试添加来自DeamonThread的通知时,它就不会了,因为线程不是一个活动。
我试图将其更改为扩展活动、实现Runnable,但之后不可能将其变为Deamon。
感觉我错过了一些轻松的东西..。
public void run() {
while (counter < 100) {
try {
sleep(random.nextInt(10000));
} catch (InterruptedException e) {
e.printStackTrace();
}
Task task = new Task("AI", "this was the " + counter
+ " AI message", flow);
sendNotation();
}
counter++;
}
}
private void sendNotation() {
NotificationManager nm=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Intent intent = new Intent(this, Flippin.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
String body = "This is a message from Adam";
String title = "One new Task";
NotificationCompat.Builder n = new NotificationCompat.Builder(this);
n.setContentIntent(pi);
n.setSmallIcon(R.drawable.notif);
n.setContentTitle(title);
n.setContentText(body);
n.setDefaults(Notification.DEFAULT_ALL);
n.setAutoCancel(true);
nm.notify(uniqueID, n.build());
finish();
}
发布于 2013-07-31 09:24:49
这就是我正在寻找的解决方案,我只需要访问上下文(我的应用程序)。注:我确实认为这是一个糟糕的设计,但由于这只是用于一个原型,我会认为它是完美的。
在Android文件中声明如下
<application android:name="com.example.MyApplication">
</application>
然后写这个类
public class MyApplication extends Application{
private static Context context;
public void onCreate(){
super.onCreate();
MyApplication.context = getApplicationContext();
}
public static Context getAppContext() {
return MyApplication.context;
}
}
现在,每个where调用MyApplication.getAppContext()静态地获取应用程序上下文。
private void sentNotation() {
NotificationManager nm = (NotificationManager) MyApplication.getAppContext().getSystemService(Context.NOTIFICATION_SERVICE);
Intent intent = new Intent(MyApplication.getAppContext(), Flippin.class);
PendingIntent pi = PendingIntent.getActivity(MyApplication.getAppContext(), 0, intent, 0);
String body = "This is a message from Adam";
String title = "One new Task";
NotificationCompat.Builder n = new NotificationCompat.Builder(MyApplication.getAppContext());
n.setContentIntent(pi);
n.setSmallIcon(R.drawable.notif);
n.setContentTitle(title);
n.setContentText(body);
n.setDefaults(Notification.DEFAULT_ALL);
n.setAutoCancel(true);
nm.notify(uniqueId, n.build());
finish();
}
发布于 2013-07-30 13:25:53
如果您想启动一个守护进程,那么您应该查看服务
有许多教程可以从Service发送通知。
是的,可以使用处理程序从非UI线程发送通知。
https://stackoverflow.com/questions/17944955
复制相似问题