2012-02-25 10 views
0

だから、SMSが来るたびにnotifの通知を与えることができるアプリを作成したいと思います。 私の主な問題は、2つのAcitivites /クラスをどのように組み合わせるかを混乱させることです。私はBroadcastReceiverをSMSReceiverクラスに拡張して、新しいSMSが来たかどうかを検出し、SMSNotifクラスのActivityを拡張します。問題は、各アクティビティで1つ以上のクラスを拡張できないことです。SMS通知用に2つの拡張アクティビティを組み合わせる:D

これはSMSReceiverクラスです:

public class SMSReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context arg0, Intent arg1) { 
    // TODO Auto-generated method stub 

    Bundle bundle = arg1.getExtras(); 
    SmsMessage[] msgs = null; 
    String str = ""; 
    if (bundle != null) { 
     Object[] pdus = (Object[]) bundle.get("pdus"); 
     msgs = new SmsMessage[pdus.length]; 

     for (int i = 0; i < msgs.length; i++) { 
      msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
      str += "SMS from " + msgs[i].getOriginatingAddress(); 
      str += " :"; 
      str += msgs[i].getMessageBody().toString(); 
      str += "\n"; 
     } 

     Toast.makeText(arg0, str, Toast.LENGTH_SHORT).show(); 
    } 
    //Intent i = new Intent(SMSReceiver.this, SMSNotif.class); 
} 

}

そして、これが私のSMSNotifクラスです:

再び
public class SMSNotif extends Activity{ 
static final int HELLO_ID = 1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

    //String ns = Context.NOTIFICATION_SERVICE; 
    NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 

    //int icon = R.drawable.ic_launcher; 
    String tickerText = "Hello"; 
    //long when = System.currentTimeMillis(); 

    Notification notification = new Notification(R.drawable.ic_launcher, tickerText, System.currentTimeMillis()); 

    //Context context = getApplicationContext(); 
    String contentTitle = "My notification"; 
    String contentText = "Hello World!"; 
    Intent notificationIntent = new Intent(this, SMSNotif.class); 
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 

    notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent); 
    notification.defaults = Notification.DEFAULT_ALL; 
    mNotificationManager.notify(HELLO_ID, notification); 

} 

}

、私の主な質問です:どのように組み合わせますかそれらのアクティビティので、私は毎回、ユーザーが新しいSMSを取得する、私のアプリはnotif(jusではないことを表示しますトーストフォームSMSNotif)。ここで

+0

ハローALLに受信機を登録します! : "Hello"と言うのを忘れて申し訳ありません システムは自分の投稿を編集することを許可していません:( –

+0

通知のためのコードを 'SMSReceiver'に書くのが簡単ではありませんか? – Jin35

+0

はい私はそれを意味します。しかし、私はそれを組み合わせる方法はわかりません..:D ありがとうhe2 –

答えて

0

はあなたの問題を解決するためのトリックです:

活動クラスにBroadcastReceiverクラスがローカルにします。この方法では、受信機は活動

public class SMSNotif extends Activity{ 

    class SMSReceiver extends BroadcastReceiver { 

     @Override 
     public void onReceive(Context arg0, Intent arg1) { 
      ... 
      someActivityMetod("Hello world from receiver"); 
     } 

    } 

    void someActivityMetod(String message) 
    { 
     ... 
    } 
} 

あなたもしなければならないで何かを行うことができます(未)の活動コード

public class SMSNotif extends Activity{ 

      BroadcastReceiver myReceiver = null; 



    @Override 
    public void onPause() 
    { 

     if (myReceiver != null) 
     { 
      unregisterReceiver(myReceiver); 
      myReceiver = null; 
     } 
     super.onPause(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     if (myReceiver == null) 
     { 
      myReceiver = new SMSReceiver(); 
      IntentFilter filter = new IntentFilter("Some.Action.Code"); 
      registerReceiver(myReceiver, filter); 
     } 
    } 
+0

ありがとうございました! 私はあなたの第2コードで混乱します。 あなたonPauseとonResumeを使用しますが、onCreateはどこにありますか?onResumeの後にありますか? 申し訳ありません私は初心者ですし、そのようなネストされたクラスを使用することはありません:D –

+0

Btw、そのような入れ子クラスを作成するよりも良い方法はありますか? ありがとうございます! :D –

+0

こんにちは、あなたはまだonOnCreateが必要です。アクティビティは実行中で表示されている場合にのみ受信する必要があるため、onPauseとonResumeが必要です – k3b

関連する問題