gpt4 book ai didi

java - 如何修复崩溃而不是调用电话的应用程序?

转载 作者:行者123 更新时间:2023-11-29 23:13:16 24 4
gpt4 key购买 nike

我正在尝试制作一个在收到特定消息时开始调用的应用程序。一切正常,只是应用程序在应该开始通话时崩溃了。

问题出在我使用 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();
}
}
}

但这并没有解决我的问题。我检查并授予应用程序开始通话所需的所有权限。在 Debug模式下,我收到此消息:

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.

最佳答案

问题是您正试图将 Activity 用作另一个类。根据经验,如果您正在调用 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);

关于java - 如何修复崩溃而不是调用电话的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55735179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com