如何从android中的另一个活动调用活动中的函数?
我在安卓系统中发送短信时遇到问题。我有两节课。其中一个是SendMessage.java,另一个是SendingSms.java,我想通过SendingSms.java文件发送我的消息,所以其中有一个sendSms类,我想在SendMessage.java文件中使用这个sendSms函数,但不能。此外,我可以使用SendingSms.java中的函数,但当我在其中编写发送sms代码时,它不起作用。有什么问题吗 下面是我的SendMessage.java中的函数如何从android中的另一个活动调用活动中的函数?,android,android-activity,sendmessage,Android,Android Activity,Sendmessage,我在安卓系统中发送短信时遇到问题。我有两节课。其中一个是SendMessage.java,另一个是SendingSms.java,我想通过SendingSms.java文件发送我的消息,所以其中有一个sendSms类,我想在SendMessage.java文件中使用这个sendSms函数,但不能。此外,我可以使用SendingSms.java中的函数,但当我在其中编写发送sms代码时,它不起作用。有什么问题吗 下面是我的SendMessage.java中的函数 public void sendM
public void sendMessageButton (View view)
{
//SendingSms send = new SendingSms();
if(who_detail.getText().toString().length()>0 && message_text.getText().toString().length()>0 )
{
sendSMS(who_detail.getText().toString(), message_text.getText().toString());
}
else
{
Toast.makeText(getApplicationContext(), R.string.sendingsms_error, Toast.LENGTH_LONG).show();
}
}
这是我的sendinSms.java
package com.example.stildeneme;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.telephony.SmsManager;
import android.widget.Toast;
public class SendingSms extends Activity {
public void sendSMS(String telNo, String mesaj)
{
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
switch(getResultCode())
{
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS Gönderildi",Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Toast.makeText(getBaseContext(), "Generic failure",Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Toast.makeText(getBaseContext(), "No service",Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Toast.makeText(getBaseContext(), "Null PDU",Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Toast.makeText(getBaseContext(), "Radio off",Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(SENT));
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode())
{
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS iletildi",
Toast.LENGTH_SHORT).show();
break;
case Activity.RESULT_CANCELED:
Toast.makeText(getBaseContext(), "SMS iletilemedi",
Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(DELIVERED));
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(telNo, null, mesaj, sentPI, deliveredPI);
Toast.makeText(getApplicationContext(), telNo.toString() + " - " + mesaj.toString(), Toast.LENGTH_LONG).show();
}
}
顺便说一下,我从SendingSms类扩展了SendMessage类
这是我的日志
11-30 09:48:09.613: E/AndroidRuntime(1007): FATAL EXCEPTION: main
11-30 09:48:09.613: E/AndroidRuntime(1007): java.lang.IllegalStateException: Could not execute method of the activity
11-30 09:48:09.613: E/AndroidRuntime(1007): at android.view.View$1.onClick(View.java:2144)
11-30 09:48:09.613: E/AndroidRuntime(1007): at android.view.View.performClick(View.java:2485)
11-30 09:48:09.613: E/AndroidRuntime(1007): at android.view.View$PerformClick.run(View.java:9080)
11-30 09:48:09.613: E/AndroidRuntime(1007): at android.os.Handler.handleCallback(Handler.java:587)
11-30 09:48:09.613: E/AndroidRuntime(1007): at android.os.Handler.dispatchMessage(Handler.java:92)
11-30 09:48:09.613: E/AndroidRuntime(1007): at android.os.Looper.loop(Looper.java:123)
11-30 09:48:09.613: E/AndroidRuntime(1007): at android.app.ActivityThread.main(ActivityThread.java:3683)
11-30 09:48:09.613: E/AndroidRuntime(1007): at java.lang.reflect.Method.invokeNative(Native Method)
11-30 09:48:09.613: E/AndroidRuntime(1007): at java.lang.reflect.Method.invoke(Method.java:507)
11-30 09:48:09.613: E/AndroidRuntime(1007): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-30 09:48:09.613: E/AndroidRuntime(1007): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-30 09:48:09.613: E/AndroidRuntime(1007): at dalvik.system.NativeStart.main(Native Method)
11-30 09:48:09.613: E/AndroidRuntime(1007): Caused by: java.lang.reflect.InvocationTargetException
11-30 09:48:09.613: E/AndroidRuntime(1007): at java.lang.reflect.Method.invokeNative(Native Method)
11-30 09:48:09.613: E/AndroidRuntime(1007): at java.lang.reflect.Method.invoke(Method.java:507)
11-30 09:48:09.613: E/AndroidRuntime(1007): at android.view.View$1.onClick(View.java:2139)
11-30 09:48:09.613: E/AndroidRuntime(1007): ... 11 more
11-30 09:48:09.613: E/AndroidRuntime(1007): Caused by: java.lang.SecurityException: Sending SMS message: User 10048 does not have android.permission.SEND_SMS.
11-30 09:48:09.613: E/AndroidRuntime(1007): at android.os.Parcel.readException(Parcel.java:1322)
11-30 09:48:09.613: E/AndroidRuntime(1007): at android.os.Parcel.readException(Parcel.java:1276)
11-30 09:48:09.613: E/AndroidRuntime(1007): at com.android.internal.telephony.ISms$Stub$Proxy.sendText(ISms.java:369)
11-30 09:48:09.613: E/AndroidRuntime(1007): at android.telephony.SmsManager.sendTextMessage(SmsManager.java:87)
11-30 09:48:09.613: E/AndroidRuntime(1007): at com.example.stildeneme.SendingSms.sendSMS(SendingSms.java:69)
11-30 09:48:09.613: E/AndroidRuntime(1007): at com.example.stildeneme.SendMessage.sendMessageButton(SendMessage.java:76)
11-30 09:48:09.613: E/AndroidRuntime(1007): ... 14 more
将该方法设置为publicstatic,您将从另一个活动访问该方法。然后 称之为activity1.sendsms 就是这样。如果你发布的代码将建议你更好的方式。。。希望这对你有帮助 您好,请使用下面的代码。问题是你需要使用上下文
将该方法设置为publicstatic,您将从另一个活动访问该方法。然后 称之为activity1.sendsms 就是这样。如果你发布的代码将建议你更好的方式。。。希望这对你有帮助 您好,请使用下面的代码。问题是你需要使用上下文
您可以通过两种方式进行: 一,。将方法所在活动的上下文传递到要调用该方法的其他活动中 二,。第二种方法是使该方法成为静态的,然后使用classname和从其他活动调用它。接线员 例如:
Class_Name.method您可以通过两种方式执行: 一,。将方法所在活动的上下文传递到要调用该方法的其他活动中 二,。第二种方法是使该方法成为静态的,然后使用classname和从其他活动调用它。接线员 例如:
Class\u Name.method首先,您缺少一个权限:
> Caused by: java.lang.SecurityException: Sending SMS message: User
> 10048 does not have android.permission.SEND_SMS.
其次,这个方法不应该是静态的——你可能会有内存泄漏
如果SendMessage扩展了SendSms,则应该将SendSms.SendSms方法设置为公共,并且它应该可以工作
您不应该使用:静态上下文
上下文应该是一个普通字段。你为什么需要它:>?您可以使用活动上下文首先,您缺少一个权限:
> Caused by: java.lang.SecurityException: Sending SMS message: User
> 10048 does not have android.permission.SEND_SMS.
其次,这个方法不应该是静态的——你可能会有内存泄漏
如果SendMessage扩展了SendSms,则应该将SendSms.SendSms方法设置为公共,并且它应该可以工作
您不应该使用:静态上下文
上下文应该是一个普通字段。你为什么需要它:>?您可以先在sendMessage.java中使用活动上下文初始化类 sendinsms sm=新的sendinsms
sm.sendsmssyour参数 首先初始化sendMessage.java中的类 sendinsms sm=新的sendinsms
sm.sendsmssyour参数 你能粘贴一些代码吗?我会更容易-也许你可以发布一些代码?我在那里编辑了我的问题,代码。你能粘贴一些代码吗?我会更容易-也许你可以发布一些代码?我编辑了我的问题,代码在那里。好的,我编辑了我的问题。但是有一个问题,如果我使sendSms函数为静态,我会出错。您好,您似乎没有添加权限。请加上。啊,我真傻,我忘了,我在和这个打仗:非常感谢好的,我编辑了我的问题。但是有一个问题,如果我使sendSms函数为静态,我会出错。您好,您似乎没有添加权限。请加上。啊,我真傻,我忘了,我在和这个打仗:非常感谢