2012-01-25 8 views
1

私はAndroidを手に入れようとしていますサービス着信電話を聴いて、着信があったときに着信番号を取得して、メッセージにテキストを入力します。通話を受信したときにSMSを「適切に」送信する方法は?

私は PhoneStateListenerをした私のサービスで

TelephonyManager tManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
PhoneStateListener listener = new PhoneStateListener() 
{ 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) 
    { 
     switch(state) 
     { 
      case TelephonyManager.CALL_STATE_IDLE: 
       Log.d(TAG, "Phone: Idle"); 
      break; 
      case TelephonyManager.CALL_STATE_RINGING: 
       Log.d(TAG, "Phone: Ringing."); 
       Log.i(TAG, "Incoming call from: " + incomingNumber); 
       sendSms(); 
      break; 
      case TelephonyManager.CALL_STATE_OFFHOOK: 
       Log.d(TAG, "Phone: Off Hook"); 
      break; 
     } 
    } 
}; 
tManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); 

次のように私のsendSms()関数は次のとおりです。

private void sendSms() 
{ 
    SmsManager manager = SmsManager.getDefault(); 

    wakeLock.acquire(); 
    Log.d(TAG, "Wake Lock Acquired!"); 

    if (getMessageContent(getInformStatus()).length() > 160) 
    { 
     ArrayList<String> messagelist = manager.divideMessage(getMessageContent(getInformStatus())); 

     manager.sendMultipartTextMessage(getReturnAddress(), null, messagelist, null, null); 
     Log.i(TAG, "Multipart Text Message Sent!"); 
    } 
    else 
    { 
     manager.sendTextMessage(getReturnAddress(), null, getMessageContent(getInformStatus()), sentPI, null); 
     Log.i(TAG, "Text Message Sent!"); 
    } 

    wakeLock.release(); 
    Log.d(TAG, "Wake Lock Released!"); 
} 

私もSMS_SENTブロードキャストレシーバーにを持っていますsendSms()関数が何らかの理由で送信されなかった場合、それを呼び出すテキストメッセージが正しく送信されているかどうかを確認してください。

resend = new BroadcastReceiver() 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     switch (getResultCode()) 
     { 
      case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
       Log.e(TAG, "Text did NOT send (GENERIC_FAILURE)"); 
       Log.i(TAG, "Attempting to resend"); 
       sendSms(); 
      break; 
      case SmsManager.RESULT_ERROR_NO_SERVICE: 
       Log.e(TAG, "Text did NOT send (NO_SERVICE)"); 
       Log.i(TAG, "Attempting to resend"); 
       sendSms(); 
      break; 
      case SmsManager.RESULT_ERROR_RADIO_OFF: 
       Log.e(TAG, "Text did NOT send (RADIO_OFF)"); 
       Log.i(TAG, "Attempting to resend"); 
       sendSms(); 
      break; 
     } 
    } 
}; 
registerReceiver(resend, new IntentFilter("android.provider.Telephony.SMS_SENT")); 

これは数回、実際に「送信」..電話する前に、それは時々PhoneStateListenerでとIDLEを鳴らす前後にの間で切り替えることが好きな他の人の携帯電話にしかし、私の携帯電話の罰金に動作しますアプリケーションがに複数のテキストメッセージを送信しようとしていることをユーザーに確認します。 [はい]をクリックすると、もう一度尋ねられます。

はそれがすべてでこれを実行しない、それは実際に別の電話にテキストメッセージのいずれか..

を送信することはありません、それを改善するために...他の携帯電話は、動きとを通過しますlogcatは、それが実際にそれを送ると言う..鉱山と同じですが、受信者は決して

一種の自動応答サービスであることを仮定します。.. SMS得ないと私は試してみて、それを動作させるたかったです少なくともFroyo、Gingerbread、Ice Creamサンドウィッチで。

   ギャラクシーネクサス(トロ)(アンドロイド4.0.3)
   ドロイド1(ショールズ)(アンドロイド2.3.7)
    HTCサンダーボルト:ところで

、それは私に100%の作品(メカ)(アンドロイド2.3.7)

しかし、それは私の友人のだ場合:
   ネクサスS 4G(crespo4g)(アンドロイド4.0.3)
       または私の他の友人のは
   ギャラクシーネクサス(トロ)(アンドロイド4.0.3)

それは

私が本当に理解していないと、それはdoesnのことない作品..ですん私とまったく同じ電話で私の友人と仕事をしないでください..

私はこのコードの実装がヒットしたかのように感じていて、誰かが洞察の洞察を手伝ってくれたのかと不思議に思っていました。

ありがとうございます!

+0

古い質問を残して申し訳ありませんが、この質問は興味深いです!あなたはなぜSMSが送られなかったのかを知りましたか?あなたは通話中にSMSを送ることができないのでそれはできますか? – jtnire

+0

また、すべての電話機はGSMを使用していましたか?また、メッセージが送信されたことをどのように知っていますか?私はあなたの放送受信機でACTIVITY.RESULT_OKをチェックしていないことがわかります...... – jtnire

答えて

1

私はそれを理解したと思います。私がやったことは、ハンドラランナブルは、最初に電話がかけられてから30秒後に電話をかけることになりました。(これはあなたのポケットに入っていたと仮定して)電話を終えてからテキストメッセージを送信する。これは、他の誰がこの疑問を抱い役立ちます

私はこれは私が持っていた唯一の問題であると思いますが、それは今私の友人ギャラクシーネクサス(トロ)で動作するようです

...

・ホープ..

乾杯!

関連する問題