在應用程序中,我顯示了一些電話號碼,用戶可以在它們上點擊撥號(autoLink
在文本視圖上設置爲phone
)。
當我點擊數字時,撥號的選項顯示出來。
我的問題是:有沒有辦法確定用戶是否真的按下了撥號盤上的撥號按鈕來實際撥打電話?檢測用戶是否以編程方式實際撥打了號碼
3
A
回答
0
如果撥號盤打開或沒有打開,則可以聽到事件,如果撥號盤沒有打開,則可以從應用程序中說出來,或者像其他人一樣。 或者您可以通過撥打您的代碼中的號碼來調用webservice API。響應後,您可以從您的應用程序中檢測到它,而不是從撥號盤或反之亦然。
1
您可以創建一個GSMBroadcastListener並接收有關電話呼叫狀態(掛機,振鈴,建立等)的事件。
如果你想知道,如果它發生在點擊你的手機按鈕後,只需在點擊事件中創建這個監聽器,所以只有當你點擊一個按鈕時纔會收到事件。 通話結束後,在掛機事件中解除掛起(取消註冊),因此在通話結束後不會收到事件。
這是我實現與監聽器接口,在生產應用程序正常工作:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
代碼:
public interface GSMBroadcastListener {
void onHangUp(
void onEstablished();
void onRinging();
}
public class GSMBroadcastReceiver extends BroadcastReceiver {
private static GSMBroadcastListener handler = null;
private static PrivateListener privateListener = null;
public static void registerGSMBroadcastListener(@Nullable GSMBroadcastListener listener) {
handler = listener;
}
@Override
public void onReceive(Context context, Intent intent) {
if (privateListener == null) {
privateListener = new PrivateListener();
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(privateListener, PhoneStateListener.LISTEN_CALL_STATE);
}
}
private class PrivateListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
Log.i("PHONE_STATE", String.format("GSM event \"onCallStateChanged\" received: state=%d; incomingNumber=\"%s\";", state, incomingNumber));
if (handler != null) {
if (state == TelephonyManager.CALL_STATE_IDLE) {
Log.i("PHONE_STATE", "Forwarding event as \"GSM onHangUp\".");
handler.onHangUp();
} else if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
Log.i("PHONE_STATE", "Forwarding event as \"GSM onEstablished\".");
handler.onEstablished();
} else if (state == TelephonyManager.CALL_STATE_RINGING) {
Log.i("PHONE_STATE", "Forwarding event as \"GSM onRinging\".");
handler.onRinging();
}
}
}
}
}
該類會將GSM事件,你有GSMBroadcastReceiver.registerGSMBroadcastListener
添加監聽器。
要使用它,你需要這樣的:
註冊的接收器在
manifest
<receiver android:name=".handlers.GSMBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.PHONE_STATE"/> </intent-filter> </receiver>
然後,在你的電話號碼按鈕的點擊監聽,註冊一個監聽器: (請注意,您在onHangUp()回調中取消註冊!)
GSMBroadcastReceiver.registerGSMBroadcastListener(new GSMBroadcastListener() { @Override public void onRinging() { Log.i("GSM", "GSM event \"onRinging\" received."); } @Override public void onEstablished() { Log.i("GSM", "GSM event \"onEstablished\" received."); } @Override public void onHangUp() { Log.i("GSM", "GSM event \"onHangUp\" received."); GSMBroadcastReceiver.registerGSMBroadcastListener(null); // Unregister the handler! } });
就是這樣! 您現在應該在點擊按鈕後獲知有關GSM活動的信息。
希望這有助於 歡呼聲, 格里斯
0
public class Outgoing_Call_Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
if(intent.getExtras().getString("android.intent.extra.PHONE_NUMBER").equals(new MyApp(context).getEmergencyNumber()));
}
}
}
試試這個代碼。它會幫助你。
相關問題
- 1. 在iPhone上撥打號碼以編程方式更改「嗶」聲是否可行?
- 2. Android以編程方式撥打電話號碼
- 3. 目前iPhone撥號盤了號碼,但沒有實際撥打電話
- 4. 撥打電話時是否可以撥打電話號碼?
- 5. 如何在iOS上檢測我撥打的號碼是否忙?
- 6. 以編程方式撥打電話
- 7. IOS:如何檢測用戶取消撥打電話號碼
- 8. 以編程方式檢測Android上是否安裝了應用程序
- 9. 是否可以撥打帶分機號碼的電話號碼?
- 10. 以編程方式撥打帶有訪問代碼的電話號碼
- 11. 以編程方式檢查在Windows上是否啓用了IPv6
- 12. 檢測用戶是否移動了地圖,或者它是否以編程方式發生iOS Mapkit
- 13. Android如何檢測是否以編程方式啓用了一個小部件?
- 14. 如何以編程方式撥打Android SDK中的電話號碼?
- 15. 如何以編程方式撥打*#100#並找回自己的電話號碼?
- 16. 以編程方式撥打電話後執行代碼
- 17. 檢查用戶是否允許以編程方式截斷表
- 18. 如何以編程方式檢測用戶代理是否阻止訪問Facebook
- 19. 以編程方式檢查是否部署了jboss中的ear
- 20. 以編程方式檢測菜單選項是否在應用程序上實現了
- 21. 以編程方式檢測是否在Firefox上安裝了插件
- 22. 如何以編程方式檢測當前系統上是否安裝了MSMQ?
- 23. 撥打號碼
- 24. 如何以編程方式檢查用戶密碼是否正確?
- 25. 是否可以允許用戶(按下按鈕後)撥打特定號碼?
- 26. 以編程方式檢測表單是否被捕獲
- 27. 檢測iPad是否以編程方式支持SIM卡
- 28. 以編程方式檢測iPad是否具有Retina顯示屏?
- 29. 以編程方式檢測iPhone是否跌倒在地上
- 30. 如何檢測onscroll事件是否以編程方式生成?
你可以聽電話狀態,它應該提供你正在撥打的號碼。 –
在textview的click事件上維護檢查用戶是否點擊過的標誌?我應該提供代碼嗎? –
@VladMatvienko:那是怎麼做的? – Jim