2012-04-09 50 views
1

我正在开发一个短信应用程序。一旦短信到达收件箱,它应该显示一些警报。 我想在下面的代码中添加警报。可能吗?如何在Android的广播接收器类中添加AlertDialog?

public class SMSReceiver extends BroadcastReceiver 
{ 
     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
       Bundle bundle = intent.getExtras();   
     SmsMessage[] msgs = null; 

     if(null != bundle) 
     { 

      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs = new SmsMessage[pdus.length]; 
      byte[] data = null; 

      for (int i=0; i<msgs.length; i++){ 
       msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);     


      } 


     } 
     } 

} 
+0

可能重复的http://stackoverflow.com/q/4844031/741249 – THelper 2012-04-25 07:19:12

回答

3

在应用程序中创建一个Activity并从BroadcastReceiver

开始Activity现在的Activity

onCreate方法中启动AlertDialog创建style.xmlres/values文件夹中,并把这个

<style name="Theme.Transparent" parent="android:Theme"> 
     <item name="android:windowIsTranslucent">true</item> 
     <item name="android:windowBackground">#000000</item> 
     <item name="android:windowNoTitle">true</item> 

    </style> 
里面

使Activty透明android:theme="@style/Theme.Transparent"作为Activity的属性在您的AndroidManifest.xml文件中,因此只显示AlertDialog

+0

其工作非常感谢... – user2012 2012-04-09 13:26:30

+0

此警报将显示,即使应用程序没有运行在前台? – user2012 2012-04-10 11:08:14

+0

是的,它会被显示。每当你从'BroadcastReceiver'开始你的活动。如果你在'Activity'的'onCreate()'方法中写入'AlertDialog'的代码,那么从'BroadcastReceiver'开始, – Ravi1187342 2012-04-10 11:12:42

1

据我所知,你不能从广播接收机发起活动。如果是这样的话,这将帮助你:

Intent i=new Intent(context,ActivityName.class); 
    startActivity(i); 

和“如何显示AlertDialog”,以下拉维的回答是你能做的最好的事情。

+0

thanq。它的工作。 – user2012 2012-04-09 13:28:54

0

调用新的活动设置对话框主题,从广播接收机的方法的onReceive叫..

0

您应该使用通知管理器: http://developer.android.com/guide/topics/ui/notifiers/notifications.html

具体来说谷歌说(他们的重点):

后台服务绝不应该自行启动一项活动以便接收用户交互。该服务应该创建一个状态栏通知,该通知将在用户选择时启动该活动。

你说的是BroadcastReceiver而不是服务,但我怀疑它仍然适用。