0

我正在构建一个更大系统的原型应用程序。该原型将处于离线状态,但看起来仍像是从服务器获取信息。即使应用程序未打开(使用 DeamonThread)。

所以我创建了 Android 应用程序,现在尝试添加一个 AI(在应用程序内)来创建和删除任务。它可以工作,但是当我尝试从 DeamonThread 添加通知时,它不会因为 Thread 不是 Activity。

我试图将其更改为扩展 Activity 实现 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();       
}
4

2 回答 2

0

如果你想启动一个守护进程,那么你应该看看Service

有许多教程用于从服务发送通知。

是的,可以使用Handler从非 UI 线程发送通知。

于 2013-07-30T13:25:53.640 回答
0

这是我一直在寻找的解决方案,我只需要访问上下文(我的应用程序)。注意我确实认为这是一个糟糕的设计,但由于这仅用于原型,我认为它是完美的。

在 Android Manifest 文件中声明如下

    <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;
}
}

现在每个地方都调用 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-31T09:24:49.263 回答