Android записывает строку в файл в Broadcast Receiver - PullRequest
0 голосов
/ 15 января 2012

Я настроил широковещательный приемник для захвата SMS-сообщений. Класс отображает сообщение, используя Toast, но мне нужно записать строку в файл, но, поскольку это не действие, оно не работает.

Можно ли как-нибудь написать строку "sms message" в файл в Broadcast Receiver?

Если нет, то кто-нибудь может придумать другой способ сохранить SMS-сообщение в файл, если приложение не запущено при получении текстового сообщения?

   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>

Это мой первый пост, поэтому я надеюсь, что все сделал правильно, заранее спасибо, этот сайт мне очень помог.

Ответы [ 3 ]

2 голосов
/ 15 января 2012

Попробуйте передать context в SaveMessage ...

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 голосов
/ 15 января 2012

У вас нет разрешения на запись на SDCard.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  

Хороший пример кода здесь
http://androidgps.blogspot.com/2008/09/writing-to-sd-card-in-android.html

Однако я бы не стал писать в корень SD-карты. Рекомендуется писать в / data / [пакет приложений] /

Замените [пакет приложения] вашим пакетом, например: com.example.helloandroid

0 голосов
/ 15 января 2012

Для получения объекта File-private для ваших данных вы можете использовать следующее:

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

(Используйте объект Context, переданный в onReceive.) Затем вы можете открыть и записать в него стандартные классы из java.io:

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

Файлы в вашем каталоге внешних файлов будут удалены при удалении приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...