我正在尝试制作一个在收到特定消息时启动通话的应用程序。一切正常,只是应用程序在应调用时崩溃。
问题出在我使用startActivity()
的那一行。我不知道为什么会崩溃。有人可以帮我吗?
public class SmsBroadcastReceiver extends BroadcastReceiver {
public static final String SMS_BUNDLE = "pdus";
@Override
public void onReceive(Context context, Intent intent) {
Bundle intentExtras = intent.getExtras();
//....
String cod = "message";
if(smsBody.compareTo(cod) == 0){
CallClass obj = new CallClass();
obj.call();
}
//....
private class CallClass extends AppCompatActivity {
public void call() {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:+107222222"));
startActivity(callIntent);
}
}
编辑:
我也尝试了以下代码:
private class CallClass extends AppCompatActivity {
public void call() {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:+107222222"));
try{
startActivity(callIntent);
}
catch(SecurityException e) {
e.printStackTrace();
}
}
}
但这不能解决我的问题。我检查了一下,并赋予了应用开始通话所需的所有权限。在调试模式下,我收到此消息:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: romania.ovi.smsapp, PID: 9715
java.lang.RuntimeException: Unable to start receiver romania.ovi.smsapp.SmsBroadcastReceiver: java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3388)
....
W/System: A resource failed to call close.
答案 0 :(得分:1)
确保您的AndroidManifest.xml中有此
<uses-permission android:name="android.permission.CALL_PHONE" />
您的方法应该看起来像这样:
public void call(String message, Context context) {
if(message.compareTo("SpecificMessage")){
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:+40773733585"));
startActivity(callIntent);
}
}
答案 1 :(得分:0)
问题是您试图将Activity用作另一个类。根据经验,如果您正在调用Activity构造函数,那么您做错了什么。该类不应该是一个活动,或者您不应该调用构造函数。
在您的用例中,最好在BroadcastReceiver本身中编写呼叫代码。
@Override
public void onReceive(Context context, Intent intent) {
...
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:+107222222"));
context.startActivity(callIntent);
}
编辑:
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:+107222222"));
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(callIntent);