2011-09-04 38 views
0

我有一個android活動,它運行遠程服務,然後退出。 服務本身在設備節點上輪詢,並檢查更改, 我想用toast來提醒用戶,但我沒有讓它工作。 Toast沒有顯示,過了一會兒,Android喊道我的應用程序沒有響應。 順便說一句,我不想​​再次開始活動,並從那裏顯示吐司,我只是希望它彈出顯示給用戶當前屏幕。在自助服務中敬酒

這裏的服務代碼:

public class MainService extends Service { 

    // Native methods 
    public native static int GetWiegandCode(); 
    public native static void openWiegand(); 
    public native static void closeWiegand(); 

    static int code = 0; 

    // Other 
    private static final String TAG = MainService.class.getSimpleName(); 
    private Handler handler; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    public void run() { 
     Handler h; 
     while (true) { 
      code = GetWiegandCode(); 
      if (code > 0) { 
       h = new Handler(this.getMainLooper()); 
       h.post(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(getBaseContext(), 
          "ID " + Integer.toString(code) + 
          "Just entered", Toast.LENGTH_LONG).show(); 
        } 
       }); 
      } 
     } 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     openWiegand(); 
     Log.i(TAG, "Service Starting"); 
     this.run(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     closeWiegand(); 
     Log.i(TAG, "Service destroying"); 
    } 

    static { 
     System.loadLibrary("wiegand-toast"); 
    } 
} 
+0

也許本機的功能不能正常工作? – Joru

+0

它工作正常,我測試它已經使用Log.i打印... – stdcall

回答

3

您不能調用從服務吐司消息。除了UI線程外,您無法對UI執行任何操作。您將需要研究從您的服務中與您的UI線程進行通信的衆多方式之一 - BroadcastReciever,Messenger,AIDL等。

對於您要做的事,您可能不需要直到AIDL路線。看看這個例子中的Messenger實現,然後從SDK樣本檢查出完整的示例:

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerService.html