【问题标题】:Android Application closes after using "android.intent.action.CALL"Android 应用程序在使用“android.intent.action.CALL”后关闭
【发布时间】:2017-07-26 07:17:43
【问题描述】:

我正在构建一个 android 应用程序,我正在使用以下代码拨打 USSD 代码,例如 *123*1#。

context.startActivity(new Intent("android.intent.action.CALL", Uri.parse("tel:*123*1" + Uri.encode("#"))).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));

我面临的问题是我的应用程序正在关闭。请参阅以下日志:

03-06 17:49:33.404 4937-4937/**** D/ViewRootImpl: ViewPostImeInputStage processPointer 0
03-06 17:49:33.614 4937-4937/**** D/ViewRootImpl: ViewPostImeInputStage processPointer 1
03-06 17:49:33.654 4937-4937/**** D/USSDCode: *123*1#

                                                     --------- beginning of system
03-06 17:49:33.734 4937-4937/**** D/isAccessibility: false
             03-06 17:49:33.734 4937-4937/**** D/isMyWise1: false
03-06 17:49:33.734 4937-4937/**** D/isMyWise3: Access
03-06 17:49:33.774 4937-4937/**** I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@e5b7389 time:17108783
03-06 17:49:35.464 4937-4937/**** V/ActivityThread: updateVisibility : ActivityRecord{81dd657 token=android.os.BinderProxy@e5b7389 {****/com.databacklibrary.SIMBalanceActivity}} show : true
03-06 17:49:38.124 4937-4937/**** D/isAccessibility: false
03-06 17:49:38.124 4937-4937/**** D/isMyWise1: false
03-06 17:49:38.124 4937-4937/**** D/isMyWise3: Access
03-06 17:49:38.194 4937-4937/**** I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@e5b7389 time:17113201
03-06 17:49:38.524 4937-4937/**** D/USSDCodeMsg: onAccessibilityEvent
03-06 17:49:38.524 4937-4937/**** E/Alert1: 32
03-06 17:49:38.524 4937-4937/**** E/Alert2: com.android.phone
03-06 17:49:38.524 4937-4937/**** E/Alert3: null
03-06 17:49:38.524 4937-4937/**** E/Alert4: android.app.ProgressDialog
03-06 17:49:38.524 4937-4937/**** E/Alert5: [USSD code running...]
03-06 17:49:38.764 4937-4937/**** V/ActivityThread: updateVisibility : ActivityRecord{81dd657 token=android.os.BinderProxy@e5b7389 {****/com.databacklibrary.SIMBalanceActivity}} show : true
03-06 17:49:40.384 4937-4937/**** D/USSDCodeMsg: onAccessibilityEvent
 03-06 17:49:40.384 4937-4937/**** E/Alert1: 32
03-06 17:49:40.384 4937-4937/**** E/Alert2: com.android.phone
03-06 17:49:40.384 4937-4937/**** E/Alert3: null
03-06 17:49:40.384 4937-4937/**** E/Alert4: com.android.phone.MMIDialogActivity
03-06 17:49:40.384 4937-4937/**** E/Alert5: [Phone]
03-06 17:49:40.394 4937-4937/**** D/USSDCodeMsg: onAccessibilityEvent
03-06 17:49:40.394 4937-4937/**** E/Alert1: 32
03-06 17:49:40.394 4937-4937/**** E/Alert2: com.android.phone
03-06 17:49:40.394 4937-4937/**** E/Alert3: null
03-06 17:49:40.394 4937-4937/**** E/Alert4: android.app.AlertDialog
03-06 17:49:40.394 4937-4937/**** E/Alert5: [Connection problem or invalid MMI code., OK]
03-06 17:49:40.404 4937-4937/**** D/isAccessibility: false
03-06 17:49:40.404 4937-4937/**** D/isMyWise1: false
03-06 17:49:40.404 4937-4937/**** D/isMyWise3: Access
03-06 17:49:40.444 4937-4937/**** I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@e5b7389 time:17115454
03-06 17:49:40.544 4937-4937/**** D/ViewRootImpl: ViewPostImeInputStage processKey 0
03-06 17:49:40.544 4937-4937/**** D/ViewRootImpl: ViewPostImeInputStage processKey 1
03-06 17:49:41.254 4937-4937/**** D/ViewRootImpl: #3 mView = null

【问题讨论】:

  • 这不是完整的 logcat 检查您的 logcat 上的过滤器
  • 那是不正确/不相关的日志。您应该会看到异常堆栈跟踪。
  • @VladMatvienko 我没有遇到任何异常。我的应用程序正在接近一些安卓手机,如三星、vivo 等,但正在使用一些安卓手机,如 1+、HTC 等。
  • @VladMatvienko 我添加了所有 logcat 评论。
  • 然后添加 try..catch 和 printStackTrace() 捕获的异常

标签: android ussd tel android-phone-call


【解决方案1】:
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:" + number));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

如果您想打开拨号键盘则无需权限,否则请执行@Nitesh Mishra 提供的上述方法

【讨论】:

  • 我不想打开拨号器
  • 将 ACTION_DIAL 更改为 ACTION_CALL 并实现 @Nitesh Mishra 提到的运行时权限
  • 我的应用程序没有崩溃并在主要的安卓手机上运行,​​但在一些安卓设备上正在接近。所以我不这么认为这是运行时权限问题或您建议的任何其他周边问题
【解决方案2】:

如果是>= marshmallow,你可以这样尝试

int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE);

    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(
                this,
                new String[]{Manifest.permission.CALL_PHONE},
                "123");
    } else {
        startActivity(new Intent(Intent.ACTION_CALL).setData(Uri.parse("tel:*123#")));
    }

检查权限

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {

        case 123:
            if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
               startActivity(new Intent(Intent.ACTION_CALL).setData(Uri.parse("tel:*123#")));
            } else {
                Log.d("TAG", "Call Permission Not Granted");
            }
            break;

        default:
            break;
    }
}

别忘了在清单中添加权限

<uses-permission android:name="android.permission.CALL_PHONE" /> 

对于

【讨论】:

  • 它带我去电话对话,我不想要。
  • 然后将 ACTION_DIAL 更改为 ACTION_CALL 并在清单文件中添加该权限
  • 如果你在棉花糖上运行它,那么你必须在运行时获得许可,我认为这就是你得到错误的原因
  • 我正在向用户请求应用权限,然后只允许用户继续前进。我的一些应用程序没有关闭,但在某些手机中它正在接近。
  • 如三星、vivo、appo等
【解决方案3】:

试试这个购买调用函数调用()

public void call() {   
        Intent callIntent = new Intent(Intent.ACTION_CALL);          
        callIntent.setData(Uri.parse("tel:"+phone));          
        startActivity(callIntent);  
}

或者你可以试试这个

 context.startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:*123*1" + Uri.encode("#"))).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));

【讨论】:

  • 我做的和你在我发布的问题中看到的一样
  • Intent.ACTION_CALL 和 "android.intent.action.CALL" 是否返回相同?
【解决方案4】:

我猜它与 targetSdkVersion 和 using permissions 有关。将 targetSdkVersion 更改为 Android 5.1(API 级别 22)或更低版本。它可能会解决问题。

【讨论】:

  • 我不这么认为,因为我很好地处理了权限,而我的 android targetSDKVersion 是 25
  • 如果设备运行 Android 6.0(API 级别 23)或更高版本,并且应用的 targetSdkVersion 为 23 或更高版本,则应用在运行时向用户请求权限。所以只是为了测试,将 targetSdkVersion 降级为 22 或显示一个对话框以授予调用权限。
  • 正如我上面所说,我正在使用用户的运行时权限。
猜你喜欢
  • 2019-04-22
  • 2018-11-02
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 2023-03-19
相关资源
最近更新 更多