Mam takie zadanie, aby po otrzymaniu SMS-a zmienić treść textView(po wielu próbach nie chodzi).
Jeżeli zrobię na bazie Toast, oddzielną klasę rozszerzającą BroadcastReceiver (wcześniej rejestrując ją w manifeście) to dymek się pojawia, ale z tego poziomu nie mogę zmieniać textView, bo nie działa mi "findViewById". Natomiast mogę zmieniać textView z MainActivity na przykład po odłączeniu zasilania od telefonu, ale nie reaguje na SMS-RECEIVED.
Poniżej mój kod. W Manifeście mam dołożone:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
package com.example.dominik.smsonlyinactivity;
import android.content.BroadcastReceiver; //importuje klasę BroadcastReceiver
import android.content.Context; //importuje klasę Context
import android.content.Intent; //importuje klasę Intent
import android.content.IntentFilter; //importuje klasę IntentFilter
import android.provider.Telephony;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.TextView; //rozpoznaje widget-a
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//program który wyświetla text w textView, w klasie zagnieżdżonej
final TextView textView = (TextView) findViewById(R.id.textView); // używamy final bo jest w innej klasie
final TextView textView2 = (TextView) findViewById(R.id.textView2); // używamy final bo jest w innej klasie
//zmiana treści po odłączeniu zasilania do telefonu - to działa
BroadcastReceiver myReceiver1=new BroadcastReceiver() {//umieszczenie w klasie zagnieżdżonej
@Override
public void onReceive(Context context, Intent intent) {
textView.setText("Tel. jest w trakcie Ładowania...");
}
};
//zmiana treści po odłączeniu zasilania od telefonu - to działa
BroadcastReceiver myReceiver2=new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
textView.setText("Tel. nie jest podłączony do Ładowarki...");
}
};
//test - sprawdzanie czy sms przyszedł - to nie działa
BroadcastReceiver myReceiver3=new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
textView2.setText("odebrano SMS-a");
}
};
registerReceiver(myReceiver1, new IntentFilter(Intent.ACTION_POWER_CONNECTED));//to działa OK
registerReceiver(myReceiver2, new IntentFilter(Intent.ACTION_POWER_DISCONNECTED)); //to działa OK
registerReceiver(myReceiver3, new IntentFilter("android.provider.Telephony.SMS_RECEIVED")); //to nie jest wykonywane
}
}