为什么它不能从 MainActivity 导入 SMSReceived 中的函数?
Why didn`t it work the imported function in SMSReceived from MainActivity?
你能告诉我为什么从 MainActivity 中导入的 SMSReceived 函数不起作用吗?
package com.example.smarthome;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;
public class SMSReceiver extends BroadcastReceiver {
MainActivity MainActivityObject=new MainActivity();
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null){
Toast.makeText(context, "NewSMS", Toast.LENGTH_LONG).show();
MainActivityObject.AfisareStareLed();
}
}
}
MainActivity 的函数是:
protected void AfisareStareLed() {
TextView view = new TextView(this);
Uri uriSMSURI = Uri.parse("content://sms/inbox");
Cursor cursor = getContentResolver().query(uriSMSURI, null, null, null, null);
while (cursor.moveToNext()){
if(cursor.getString(2).equals(number) && cursor.getString(8).equals("0")){
if(cursor.getString(13).endsWith("aprins") || cursor.getString(13).endsWith("stins")){
TextView textStareLed = (TextView) findViewById(R.id.textStareLed);
textStareLed.setText(cursor.getString(13));
break;
}
}
}
markMessageRead();
}
P.S。我想制作一个函数,当我收到短信时应该修改 TextView。
您不能像在 onReceive()
:
中那样自己创建 Activity
的实例
MainActivity MainActivityObject=new MainActivity();
只有 Android 框架可以正确创建 Activity
的实例,因为它需要正确设置 Context
而 Android 框架可以做到这一点.
在您的 Activity
中,您可以创建 BroadcastReceiver
的实例(您可以使用 Activity
的内部 class)并使用 [=18 注册它=].然后,在 onReceive()
中,您将可以访问 Activity
的方法,并且可以调用一个方法来更新 UI。
你能告诉我为什么从 MainActivity 中导入的 SMSReceived 函数不起作用吗?
package com.example.smarthome;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;
public class SMSReceiver extends BroadcastReceiver {
MainActivity MainActivityObject=new MainActivity();
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null){
Toast.makeText(context, "NewSMS", Toast.LENGTH_LONG).show();
MainActivityObject.AfisareStareLed();
}
}
}
MainActivity 的函数是:
protected void AfisareStareLed() {
TextView view = new TextView(this);
Uri uriSMSURI = Uri.parse("content://sms/inbox");
Cursor cursor = getContentResolver().query(uriSMSURI, null, null, null, null);
while (cursor.moveToNext()){
if(cursor.getString(2).equals(number) && cursor.getString(8).equals("0")){
if(cursor.getString(13).endsWith("aprins") || cursor.getString(13).endsWith("stins")){
TextView textStareLed = (TextView) findViewById(R.id.textStareLed);
textStareLed.setText(cursor.getString(13));
break;
}
}
}
markMessageRead();
}
P.S。我想制作一个函数,当我收到短信时应该修改 TextView。
您不能像在 onReceive()
:
Activity
的实例
MainActivity MainActivityObject=new MainActivity();
只有 Android 框架可以正确创建 Activity
的实例,因为它需要正确设置 Context
而 Android 框架可以做到这一点.
在您的 Activity
中,您可以创建 BroadcastReceiver
的实例(您可以使用 Activity
的内部 class)并使用 [=18 注册它=].然后,在 onReceive()
中,您将可以访问 Activity
的方法,并且可以调用一个方法来更新 UI。