2013-07-30 2 views
0

Я строю прототип приложения более крупной системы. Этот прототип будет в автономном режиме, но по-прежнему выглядит так, как будто он получает информацию с сервера. Даже когда приложение не открыто (используя DeamonThread).Уведомления Android от AI в фоновом режиме

Итак, я создал приложение Android и теперь пытаюсь добавить ИИ (в приложении), которые создают и удаляют задачи. Он работает, но когда я пытаюсь добавить уведомления из DeamonThread, это не будет, поскольку Thread не является Activity.

Я попытался поменять его на extends 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();  
} 

ответ

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(); 
} 
0

Если вы хотите начать демон, то вы должны смотреть на Service

Есть много руководств там для отправки уведомлений от службы ,

И да, можно отправить уведомление из нити, отличной от UI, используя Handler.

Смежные вопросы