【发布时间】:2018-11-28 10:54:25
【问题描述】:
我在 SO 发现了许多类似的已回答问题,但在我看来,它们都与我的略有不同。
我的 MainActivity 类调用了在同一个类中定义的 addInfo() 函数。还要考虑 addInfo 函数访问 activity_main 布局。:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
String[] saInfoTxt = {"App Started"};
addInfo("APP",saInfoTxt);
...
}
public void addInfo(String sType, String[] saInfoTxt) {
Date dNow = Calendar.getInstance().getTime();
DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
String sNow = dateFormat.format(dNow);
LinearLayout layout = (LinearLayout) findViewById(R.id.info);
String sInfoTxt =TextUtils.join("\n", saInfoTxt);
sInfoTxt= sType + " " + sNow + "\n" + sInfoTxt;
TextView txtInfo = new TextView(this);
txtInfo.setText(sInfoTxt);
txtInfo.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));
((LinearLayout) layout).addView(txtInfo);
};
}
现在我有第二个类来响应接收器来拦截传入的短信。此类需要调用 MainActivity.addInfo() 函数,但我无法这样做:
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
// get sms objects
Object[] pdus = (Object[]) bundle.get("pdus");
if (pdus.length == 0) {
return;
}
// large message might be broken into many
SmsMessage[] messages = new SmsMessage[pdus.length];
StringBuilder sb = new StringBuilder();
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
sb.append(messages[i].getMessageBody());
}
String sender = messages[0].getOriginatingAddress();
String message = sb.toString();
String[] saInfoTxt = {"Sender: " + sender,"Message: " + message};
MainActivity.addInfo("SMS", saInfoTxt);
}
}
}
}
如果我将 addInfo() 定义为静态,则内部代码有问题。如果我将其保留为非静态,则第二个类看不到 addInfo()
有人能指出正确的方向吗?
提前致谢
【问题讨论】:
-
将其作为一个单独的 util 类并重用它。此外,您不能直接从其他 Activity 调用。
-
在 Application 类中创建 Activity 对象以设置 currentactivity,在每个活动上 onCreate inti 和 onStop 使对象为 null,在 SmsReceiver 上只需检查 MainActivity 的 isInstance 而不是 null。
-
为什么不在实用程序类中创建该方法?
-
我试图创建一个实用程序类,但是 addInfo() 开始出现错误,因为“findViewById”使用了函数