Приложение Android закрывается после использования "android.intent.action.CALL"

Я создаю приложение для 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

4 ответа

Вы можете попробовать так, если это>= зефир

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" /> 

для устройств < = леденец

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:" + number));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

Разрешение не требуется, если вы хотите открыть панель Dial-er, в противном случае реализуйте вышеуказанный метод, предоставленный @Nitesh Mishra

Попробуйте это купить вызов функции ()

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));

Я предполагаю, что это о targetSdkVersion и использовании разрешений. измените targetSdkVersion на Android 5.1 (уровень API 22) или ниже. Вероятно, это решит проблему.

Другие вопросы по тегам