Java Android-手机通话时启动应用程序

Java Android-手机通话时启动应用程序,java,android,Java,Android,有没有办法开发一个当用户接到电话时启动的应用程序?我真的无法深入了解这个想法的细节,但我想知道是否有电话允许这种情况发生 你可以用广播接收器来接收这样的信号 public class PhoneStatReceiver extends BroadcastReceiver{ private static final String TAG = "PhoneStatReceiver"; private static boolean incomingFlag = fal

有没有办法开发一个当用户接到电话时启动的应用程序?我真的无法深入了解这个想法的细节,但我想知道是否有电话允许这种情况发生

你可以用广播接收器来接收这样的信号

public class PhoneStatReceiver extends BroadcastReceiver{        
    private static final String TAG = "PhoneStatReceiver"; 
    private static boolean incomingFlag = false;
    private static String incoming_number = null;
    @Override
    public void onReceive(Context context, Intent intent) {
            if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){                        
                    incomingFlag = false;
                    String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);        
                    Log.i(TAG, "call OUT:"+phoneNumber);                        

            }else{                        
                    TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);                        
                    switch (tm.getCallState()) {
                    case TelephonyManager.CALL_STATE_RINGING:
                            incomingFlag = true;//标识当前是来电
                            incoming_number = intent.getStringExtra("incoming_number");
                        Log.i(TAG, "RINGING :"+ incoming_number);
                            break;
                    case TelephonyManager.CALL_STATE_OFFHOOK:                                
                            if(incomingFlag){
                                    Log.i(TAG, "incoming ACCEPT :"+ incoming_number);
                            }
                            break;
                    case TelephonyManager.CALL_STATE_IDLE:                                
                            if(incomingFlag){
                                    Log.i(TAG, "incoming IDLE");                                
                            }
                            break;
                    } 
            }

    }

}
<receiver android:name=".filter.PhoneStatReceiver">  

            <intent-filter>

                 <action android:name="android.intent.action.PHONE_STATE"/>           

                 <action android:name="android.intent.action.NEW_OUTGOING_CALL" />

            </intent-filter>

</receiver>

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

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>
像这样在AndroidManifest中注册此接收器

<receiver android:name=".filter.PhoneStatReceiver">  

            <intent-filter>

                 <action android:name="android.intent.action.PHONE_STATE"/>           

                 <action android:name="android.intent.action.NEW_OUTGOING_CALL" />

            </intent-filter>

</receiver>

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

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

您可以使用广播接收器来实现这种效果

public class PhoneStatReceiver extends BroadcastReceiver{        
    private static final String TAG = "PhoneStatReceiver"; 
    private static boolean incomingFlag = false;
    private static String incoming_number = null;
    @Override
    public void onReceive(Context context, Intent intent) {
            if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){                        
                    incomingFlag = false;
                    String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);        
                    Log.i(TAG, "call OUT:"+phoneNumber);                        

            }else{                        
                    TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);                        
                    switch (tm.getCallState()) {
                    case TelephonyManager.CALL_STATE_RINGING:
                            incomingFlag = true;//标识当前是来电
                            incoming_number = intent.getStringExtra("incoming_number");
                        Log.i(TAG, "RINGING :"+ incoming_number);
                            break;
                    case TelephonyManager.CALL_STATE_OFFHOOK:                                
                            if(incomingFlag){
                                    Log.i(TAG, "incoming ACCEPT :"+ incoming_number);
                            }
                            break;
                    case TelephonyManager.CALL_STATE_IDLE:                                
                            if(incomingFlag){
                                    Log.i(TAG, "incoming IDLE");                                
                            }
                            break;
                    } 
            }

    }

}
<receiver android:name=".filter.PhoneStatReceiver">  

            <intent-filter>

                 <action android:name="android.intent.action.PHONE_STATE"/>           

                 <action android:name="android.intent.action.NEW_OUTGOING_CALL" />

            </intent-filter>

</receiver>

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

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>
像这样在AndroidManifest中注册此接收器

<receiver android:name=".filter.PhoneStatReceiver">  

            <intent-filter>

                 <action android:name="android.intent.action.PHONE_STATE"/>           

                 <action android:name="android.intent.action.NEW_OUTGOING_CALL" />

            </intent-filter>

</receiver>

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

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

是的,当用户接到电话时,我们可以启动不同的应用程序。例如:-Truecaller,Mobile no.Tracker应用程序。
您可以为此使用服务。

是的,当用户接到电话时,我们可以启动不同的应用程序。例如:-Truecaller,Mobile no.Tracker应用程序。
public class CallReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);

        final Context cont = context;
        final Intent in = intent;

        if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {

                new Handler().postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        Intent i = new Intent(cont, MainActivity.class);
                        i.putExtras(in);
                        i.addCategory(Intent.CATEGORY_LAUNCHER);
                        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                        cont.startActivity(i);
                    }
                }, 1000);
        }
    }
}
您可以为此使用服务

public class CallReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);

        final Context cont = context;
        final Intent in = intent;

        if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {

                new Handler().postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        Intent i = new Intent(cont, MainActivity.class);
                        i.putExtras(in);
                        i.addCategory(Intent.CATEGORY_LAUNCHER);
                        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                        cont.startActivity(i);
                    }
                }, 1000);
        }
    }
}
您必须使用postDelayed实现此处理程序,以便您的活动屏幕可以位于本机调用屏幕的顶部。如果不希望发生这种情况,则必须删除此处理程序

将这些添加到您的清单中--



接听电话时,您必须使用另一个额外的_状态。这是振铃状态

您必须使用postDelayed实现此处理程序,以便您的活动屏幕可以位于本机调用屏幕的顶部。如果不希望发生这种情况,则必须删除此处理程序

将这些添加到您的清单中--




接听电话时,您必须使用另一个额外的_状态。这是用于振铃状态。

是的,这是可能的。。您尝试过什么,或者您搜索过的与此相关的内容。。。??你能和我们分享吗?我还没有开始做任何事情。期末考试后我打算做一个小项目。谢谢你们为我指明了正确的方向!是的,这是可能的。。您尝试过什么,或者您搜索过的与此相关的内容。。。??你能和我们分享吗?我还没有开始做任何事情。期末考试后我打算做一个小项目。谢谢你们为我指明了正确的方向!