2012-01-15 11 views
0

私はSMSメッセージをキャプチャするためにブロードキャストレシーバを設定しました。クラスはトーストを使用してメッセージを表示しますが、文字列をファイルに書き込む必要がありますが、アクティビティではないため動作しません。

ブロードキャストレシーバ内のファイルに "SMSメッセージ"文字列を書き込む方法はありますか?

ない場合は、誰もがテキストメッセージを受信したときに、アプリ実行せずにファイルにSMSメッセージを保存するための別の方法を考えることができますか?Android writeブロードキャストレシーバ内のファイルへの文字列

public class SMSReciever extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent){ 

    //---get the SMS message passed in--- 

    Bundle bundle = intent.getExtras();   
    SmsMessage[] msgs = null; 
    String str = "";    
    if (bundle != null) 
    { 

    //---retrieve the SMS message received--- 

     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";   
     } 


     //---display the new SMS message--- 

     Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 

     //---Save SMS message--- 

      SaveMessage(str); 

       } 
     } 


     public void SaveMessage(String message) { 

    FileOutputStream FoutS = null; 

    OutputStreamWriter outSW = null; 

    try { 

     FoutS = openFileOutput("Message.dat", MODE_PRIVATE); 

     outSW = new OutputStreamWriter(FoutS); 

     outSW.write(message); 

     outSW.flush(); 

    } 

    catch (Exception e) { 

     e.printStackTrace(); 

    } 

    finally { 

     try { 

      outSW.close(); 

      FoutS.close(); 

     } catch (IOException e) { 

      e.printStackTrace(); 

     } 

    } 

} 

構文エラー "MODE_PRIVATEが変数に解決することはできません"
- アクティビティのクラスで使用する場合のコードは唯一

を作品マニフェストファイル:

 <receiver android:name=".SMSReciever"> 
     <intent-filter> 
      <action android:name= 
       "android.provider.Telephony.SMS_RECEIVED" 
       android:enabled="true" /> 

     </intent-filter> 
    </receiver> 

これは、私の初めての投稿ですので、私はすべてを正しく行ったことを願っています。事前にこのサイトは私をとても助けてくれました。そして、あなたが開いてから標準クラスを使用して、それに書き込むことができます(onReceiveに渡されたContextオブジェクトを使用してください。)

File outFile = new File(getExternalFilesDir(null), "DemoFile.jpg"); 

答えて

2

あなたはSDカードへの書き込み権限を持っていない... SaveMessagecontextを渡す

SaveMessage(context, str); 

をお試しください...そして、次のようにあなたのSaveMessage方法を変更...

public void SaveMessage(Context context, String message) { 

    FileOutputStream FoutS = null; 
    OutputStreamWriter outSW = null; 

    try { 
     FoutS = context.openFileOutput("Message.dat", Context.MODE_PRIVATE); 

     // Rest of try block here 
    } 
    // 'catch' and 'finally' here 
} 
+0

:それは

はあなたのパッケージとの[アプリケーションパッケージ]、EXを交換/データ/ [アプリケーションパッケージ] /に書き込むための良い方法です –

0

あなたはあなたのデータのためのアプリケーション・プライベートFileオブジェクトを取得するには、次を使用することができますjava.io:アプリがアンインストールされたときに、あなたの外部ファイルのディレクトリに

Writer writer = new FileWriter(outFile); 
. . . 

ファイルが削除されます。

関連する問題