Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在应用程序关闭时检测传入和传出呼叫_Android_Telephonymanager - Fatal编程技术网

Android 在应用程序关闭时检测传入和传出呼叫

Android 在应用程序关闭时检测传入和传出呼叫,android,telephonymanager,Android,Telephonymanager,我一直在开发一款应用程序,它可以在android系统中检测来电和呼出电话并记录下来。我需要知道我的哪个sim卡接听电话或拨打电话 我可以检测电话,但在双sim卡情况下无法检测我的号码。我试着从我的通话记录中查看 这是我的密码: private void fetchCallLogs(final Context context) { Handler handler = new Handler(); handler.postDelayed(new Runnable() {

我一直在开发一款应用程序,它可以在android系统中检测来电和呼出电话并记录下来。我需要知道我的哪个sim卡接听电话或拨打电话

我可以检测电话,但在双sim卡情况下无法检测我的号码。我试着从我的通话记录中查看

这是我的密码:

private void fetchCallLogs(final Context context) {
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {

        @Override
        public void run() {
            // get start of cursor
            Log.i("CallLogDetailsActivity", "Getting Log activity...");

            if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }
            Cursor cur = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DATE + " desc");

            int accountId = cur.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID);
            //Check if call was made from sim 1 or sim 2 , if it returns 0 its from sim 1 else if 1 its from sim 2.

            String callid = "0";
            if (cur.moveToFirst() == true) {
                String phNumber = cur.getString(accountId);
                int idSimId = getSimIdColumn(cur);

                if(idSimId >= 0){
                    callid = cur.getString(idSimId);
                }

                cur.close();


            }
        }
    }, 1500);
}

public static int getSimIdColumn(final Cursor c) {

    for (String s : new String[] { "sim_id", "simid","simId","simSlot", "sub_id","slot","simnum","slotId","slot_id","slotIdx" }) {
        int id = c.getColumnIndex(s);
        if (id >= 0) {
            Log.d("TAG", "sim_id column found: " + s);
            return id;
        }
    }
    Log.d("TAG", "no sim_id column found");
    return -1;
}
还尝试检测是否使用了检测sim卡插槽

 String number = intent.getExtra("slot",-1);
但这不起作用

我需要一个可以检测sim卡号码或插槽的代码


提前感谢。

当应用程序关闭时,您的
广播接收器不运行的原因很少

  • 一些手机不允许在后台运行app,如oppo、小米、华为等。。要解决此问题,请尝试以下方法
  • 最新的Android版本Oreo

  • 如果这些原因不是您的问题的一部分,请使用该服务。怎么做

    您应该在
    AndroidManifest.xml
    中隐式注册接收方,例如:

    <receiver
        android:name=".PhonecallReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
        </intent-filter>
    </receiver>
    
    
    
    服务就是你所需要的。是的,我知道它需要服务。有谁能帮我创建这样的服务吗?很简单。试试看。如果你被卡住了,发布另一个带有源代码和错误的问题。实际上,录制是不可能的,因为没有专门用于录制的API。你能做的最好的事情就是通过麦克风录音,并希望输出的声音足够大,让麦克风把它拾起来。