当前位置: 首页 > 知识库问答 >
问题:

使用BroadcastReceiver将活动中的setText移出其他类

仲孙奇
2023-03-14

我想在我的主要活动中将我通过短信收到的按摩文本设置为文本视图。我努力尝试了很长时间,我在互联网上到处搜索,但都不起作用。请帮帮我

如何在其他活动的文本视图中设置文本?我试过了,但没用

我认为"TextView text ViewAllamMassage=(TextView)findViewById(R.id.textViewAllamMassage);"的方法在main Active中不起作用,因为程序公里停在这一行

主要活动

public class MainActivity extends Activity {

//这是另一个代码

public void showAlarmMassage(){

    //Connect to SMSReceiver Class
    *SMSReceiver receiver = new SMSReceiver();*

    //Get the Alarm Massage
    *String massage = receiver.getAlarmMassage().toString();*

    //Initialize the TextView
    *TextView textViewAlarmMassage = (TextView) findViewById(R.id.textViewAlarmMassage);*

    //Set the Alarm Massage in the TextView
    *textViewAlarmMassage.setText(massage);*
}   

}

公共类SMSReceiver扩展了BroadcastReceiver{

public String alarmMassage; 
public String senderAddress;


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

    if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
    {
        Bundle bundle = intent.getExtras();
        Object messages[] = (Object[]) bundle.get("pdus");
        SmsMessage smsMessage[] = new SmsMessage[messages.length];

        for (int n = 0; n < messages.length; n++)
            smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);

        alarmMassage = smsMessage[0].getDisplayMessageBody();
        senderAddress = smsMessage[0].getDisplayOriginatingAddress();

        //Set the AlarmMassage in the Setter Constructor
        *setAlarmMassage(alarmMassage);*            

        *MainActivity mainActivity = new MainActivity();*

        //Here I want to start the showAlarmMassage methode in the MainActivity
        *mainActivity.showAlarmMassage();*

        String toast = "Received SMS from: " + senderAddress;
        toast += "\nMessage: " + alarmMassage;

        Toast.makeText(cxt, toast, Toast.LENGTH_LONG).show();


    }
}

//Getting AlarmMassage
*public String getAlarmMassage(){*
    return this.alarmMassage;       
}

//setting AlarmMassage
*public void setAlarmMassage(String alarmMassage){*
    this.alarmMassage = alarmMassage;
}

}

显示

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="at.ffnt.datenbank"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="14"
    android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission>
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_startseite" >

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />


    </intent-filter>


    </activity>
    <activity
        android:name=".EntryActivity"
        android:label="@string/title_activity_entry" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".ViewAllEntriesActivity"
        android:label="@string/title_activity_view_all_entries" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".AudioRecording"
        android:label="@string/title_audio_recording" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver android:name=".StatusReceiver">...</receiver>
<receiver android:name=".SMSReceiver">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>


</application>

日志

01-03 17:04:30.598: E/AndroidRuntime(22422): FATAL EXCEPTION: main 01-03 17:04:30.598: E/AndroidRuntime(22422):java.lang.RuntimeException:无法启动接收器at.ffnt.datenbank.SMSRecader:java.lang.NullPointerException 01-03 17:04:30.598: E/AndroidRuntime(22422): atandroid.app.ActivityThread.handleReception(ActivityThread.java:2287)01-03 17:04:30.598: E/AndroidRuntime(22422): atandroid.app.ActivityThread.access1600美元(ActivityThread.java:140)01-03 17:04:30.598: E/AndroidRuntime(22422): atandroid.app.ActivityThread$H. handleMessage(ActivityThread.java:1313)01-03 17:04:30.598: E/AndroidRuntime(22422): atandroid.os.Handler.dispatchMessage(Handler.java:99)01-03 17:04:30.598: E/AndroAndroidRuntime(22422): atjava.lang.reflect.Method.invokeNative(Native Method)01-03 17:04:30.598: E/AndroidRuntime(22422): atjava.lang.reflect.Method.invoke(Method.java:511)01-03 17:04:30.598: E/AndroidRuntime(22422): atcom.android.internal.os.ZygoteInit$metodAndArgsCaller.run(ZygoteInit.java:1038)01-03 17:04:30.598: E/AndroidRuntime(22422): atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)01-03 17:04:30.598: E/AndroidRuntime(22422): atdalvik.system.NativeStart.main(Native Method)01-03 17:04:30.598: E/AndroidRuntime(22422):由: java. lang. NullPointerException 01-03 17:04:30.598: E/AndroidRuntime(22422): at. ffnt. datenbank. Main

共有1个答案

刘野
2023-03-14
public class SMSReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context cxt, Intent intent)
 {
  if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
   {
     Bundle b=intent.getExtras();
     Intent i=new Intent(getApplicationContext(),GetSMSActivity.class);
     i.putExtra("SMS_BUNDLE",b);
     startActivity(i);
     
   }
  }
 }
 <uses-permission android:name="android.permission.RECEIVE_SMS" />
 <activity
    android:name=".GetSMSActivity"
    android:label="@string/title_activity_startseite" >
  <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>
<receiver android:name=".SMSReceiver">
<intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
GetSMSActivity.java


TextView textViewAlarmMassage = (TextView) findViewById(R.id.textViewAlarmMassage);
Intent smsReceived=getIntent();
Bundle smsData=smsReceived.getExtras("SMS_BUNDLE");
Object messages[] = (Object[])smsData.get("pdus");
SmsMessage smsMessage[]=new SmsMessage[messages.length];
    
for (int n = 0; n < messages.length; n++)
     {
        smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
      }
String alarmMassage = smsMessage[0].getDisplayMessageBody();
String senderAddress = smsMessage[0].getDisplayOriginatingAddress();

textViewAlarmMassage.setText(alarmMassage);
 类似资料:
  • 我想使用下面另一个活动简单代码示例中的活动上下文,有什么想法吗? 谢谢

  • 我有3个活动A、B和C。A导致B,B导致C。我希望能够在A和B之间来回移动,但我希望在C开始后完成A和B。我知道如何在通过意图启动C时关闭B,但在启动C时如何关闭A?

  • GraphRequest请求=GraphRequest。newGraphPathRequest(AccessToken.getCurrentAccessToken(),“/我/朋友”,new GraphRequest。Callback(){@Override public void onCompleted(GraphResponse response){//在此处插入代码 } 这是我的男拳。xml

  • 问题内容: 有人知道如何从其他活动中关闭一个活动吗?例如:我有3个活动(活动A,B和C),并且可以从活动C中关闭活动A。我的活动结构是活动A->活动B->活动C如何从中关闭活动A活动C? 我曾尝试此代码: 但是该代码只能关闭活动B的活动A,而不能直接关闭活动C的活动A。 有谁知道直接从其他活动关闭活动?谢谢.. 问题答案:

  • 我正在尝试创建一个导航抽屉活动,这样我就可以扩展该活动,并按照这个问题链接中给出的答案在所有活动中使用菜单,但我的测试应用程序总是崩溃,下面是我的代码: BaseActivity.java

  • 从包A中,我从特权包B触发了正在运行的服务。包B执行包A的更新。目标设备正在使用Android 9(API Level 28)。更新成功(应用程序版本代码已更改)。但我的问题是更新后,包A在后台;在我的设备上,它在后台应用程序列表中,我必须手动按下它才能将其带到前台。 我希望它在安装后回到前台。 我尝试了什么: > 在安装后从包B向包a发送广播意图;看起来在包的广播接收器上没有接收到意图(可能是因