Android - 通过电话启动应用程序

时间:2014-05-03 05:45:32

标签: java android

有没有办法开发一个在用户接到电话时启动的应用程序?我无法详细了解这个想法,但想知道是否有一些电话可以让这种情况发生。

3 个答案:

答案 0 :(得分:2)

您可以使用广播接收器,就像这样

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

    }

}

在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>

答案 1 :(得分:1)

是我们可以在用户接到电话时启动另一个应用程序。例如: - Truecaller,Mobile no。跟踪器应用。 您可以使用服务。

答案 2 :(得分:1)

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实现此处理程序,以便您的活动屏幕可以位于本机调用屏幕之上。如果您不希望这种情况发生,那么您必须删除此处理程序。

将这些添加到您的清单 -

<receiver
     android:name=".CallReceiver"
     android:enabled="true" >
     <intent-filter android:priority="1000" >
     <action android:name="android.intent.action.PHONE_STATE" />
     </intent-filter>
</receiver>

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

你必须使用另一个extra_state来接听电话。这是为了振铃状态。