0

我有一个监视前台应用程序的后台服务。它用于保护某个应用程序,例如,如果受保护的应用程序位于前台,然后由于另一个应用程序启动而推送到后台,则会向用户显示另一个应用程序已经接管为前台应用程序的通知。显示来自服务的Toast通知

我能够检测到交换机,但是有什么方法可以显示Toast通知/ AlertDialog以在检测后在服务中提醒用户?

+1

在服务中显示警报对话是个坏主意。您需要使用活动上下文来显示。所以从服务导航到活动并显示警报对话框 –

+0

好的,如果我不采用AlertDialog方式,那么Toast或其他形式的通知如何?请注意,接管前台应用程序的活动不属于我。它可能劫持了我的Actitivy – user1118764

回答

3

您可以在Service类中获得应用程序库上下文,并使用Handler显示敬酒。

private Context appContext; 

@Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     appContext=getBaseContext();//Get the context here 
    } 

    //Use this method to show toast 
    void showToast(){ 
     if(null !=appContext){ 
     Handler handler = new Handler(Looper.getMainLooper()); 
     handler.post(new Runnable() { 
      @Override 
      public void run() 
      { 
        Toast.makeText(appContext, "Toast Message", Toast.LENGTH_SHORT)show(); 
      } 
     }); 

     } 
    } 
+0

你试过这个吗?我不认为它会起作用 –

+0

我在上一个项目中使用了这个。它的工作原理:) – Stallion

+0

怎么样的对话? –

0

尝试这样

final Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
       Toast.makeText(getBaseContext(), "TEST", Toast.LENGTH_SHORT).show(); 

       handler.postDelayed(this, 1000); 
       } 
      },1000); 
0

您可以使用处理程序来获取主尺蠖。尝试下面的snipt

Handler handler = new Handler(Looper.getMainLooper()); 
handler.post(new Runnable(){ 
@Override 
public void run(){ 
Toast.makeText(YourServiceName.this,"your message",Toast.LENGHT_SHORT).show(); 
} 
});