2013-07-30 1 views
0

큰 시스템의 프로토 타입 응용 프로그램을 구축 중입니다. 이 프로토 타입은 오프라인이지만 서버에서 정보를 얻는 것처럼 보입니다. 앱이 열려 있지 않은 경우에도 (DeamonThread 사용).백그라운드에서 AI의 Android 알림

그래서 Android 응용 프로그램을 만들었고 이제는 작업을 만들고 삭제하는 AI (응용 프로그램 내)를 추가하려고합니다. 그것은 작동하지만 DeamonThread에서 알림을 추가하려고하면 Thread가 Activity가 아니기 때문에 알림이 추가되지 않습니다.

변경하려고 시도했습니다. 확장 활동 실행 파일 실행 파일 하지만 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

이것은 내가 찾고자하는 해결책이며 필요한 것은 문맥 (응용 프로그램)에 대한 액세스 권한을 얻는 것뿐이었습니다. NOTE 이것은 잘못된 디자인이라고 생각하지만, 프로토 타입에만 사용되기 때문에 완벽하다고 생각합니다.

<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

이 많은 자습서를 봐야한다 .

그리고 예, Handler을 사용하여 UI가 아닌 스레드로부터 알림을 보낼 수 있습니다.

관련 문제