android android.intent.action.call 使 Android 应用程序崩溃?

Posted

技术标签:

【中文标题】android android.intent.action.call 使 Android 应用程序崩溃?【英文标题】:android android.intent.action.call crashing Android app? 【发布时间】:2019-04-22 20:20:34 【问题描述】:

我正在尝试通过我的应用拨打电话。但是每次它崩溃时logcat上都没有显示错误。我在清单中获得了许可,也在运行时检查它。

public void call(String number)
    Intent callIntent = new Intent(Intent.ACTION_CALL);
    callIntent.setData(Uri.parse("tel:"+number));
    callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(callIntent);


【问题讨论】:

CALL_PHONE 是运行时权限你在运行时问过吗? .尝试捕获并调试异常。 【参考方案1】:

你确定 context 不为 null 吗?你应该做这样的事情。 在您的调用活动中进行这些更改

private static final int REQUEST_CALL_PHONE_PERMISSION  =  100;


    if( isCallPhonePermissionGranted() )
        call("<Number>");
     else 
        call("<Number>");
    

私人无效 requestCallPermission() 最终 String[] 权限 = new String[]Manifest.permission.CALL_PHONE; ActivityCompat.requestPermissions(这个,权限,REQUEST_CALL_PHONE_PERMISSION);

   private boolean isCallPhonePermissionGranted() 
        return ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) 
        == PackageManager.PERMISSION_GRANTED;
     


    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] 
           permissions, @NonNull int[] grantResults) 
             if (requestCode != REQUEST_CALL_PHONE_PERMISSION) 
                super.onRequestPermissionsResult(requestCode, permissions, 
                grantResults);
               return;
              

         if (grantResults.length != 0 && grantResults[0] == 
                   PackageManager.PERMISSION_GRANTED) 
                   call("<Number>");
              return;
         
   


      public void call(String number)
         Intent callIntent = new Intent(Intent.ACTION_CALL);
         callIntent.setData(Uri.parse("tel:"+number));
         callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         context.startActivity(callIntent);
      

最后将此权限添加到 android Manifest.xml

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

【讨论】:

【参考方案2】:

不要忘记将相关权限添加到您的清单中:

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

意图本身就是一个描述某事的对象。它什么也没做。

public void call(String number)
    Intent intent = new Intent(Intent.ACTION_CALL);
    intent.setData(Uri.parse("tel:" + number));
    context.startActivity(intent);
   

还有How to make call in Android 6.0 and Above

【讨论】:

以上是关于android android.intent.action.call 使 Android 应用程序崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录