android - How to start something when voice call starts? -
i have built full voice recorder application.
i start recording when voice call starts on phone, how can detect calls state? tried code , didn't work me.
i need know hot start recording when voice call starts (incoming , outgoing).
here example of need.
declare receiver in androidmanifest
<receiver android:name=".incomingcall"> <intent-filter> <action android:name="android.intent.action.phone_state" /> </intent-filter> </receiver>
give read phone state permission in androidmanifest
<uses-permission android:name="android.permission.read_phone_state"/>
create class incomingcall extends broadcastreceiver class
import android.content.broadcastreceiver; import android.content.context; import android.content.intent; import android.telephony.phonestatelistener; import android.telephony.telephonymanager; import android.util.log; import android.widget.toast; /** * created matheszabi on aug/20/2017 0020. */ public class incomingcall extends broadcastreceiver { private context context; public void onreceive(context context, intent intent) { this.context = context; try { // telephony manager class object register 1 listner telephonymanager tmgr = (telephonymanager) context .getsystemservice(context.telephony_service); //create listner myphonestatelistener phonelistener = new myphonestatelistener(); // register listener listen_call_state tmgr.listen(phonelistener, phonestatelistener.listen_call_state); } catch (exception e) { log.e("phone receive error", " " + e); } } private class myphonestatelistener extends phonestatelistener { public void oncallstatechanged(int state, string incomingnumber) { log.d("myphonelistener",state+" incoming no:"+incomingnumber); if (state == 1) { string msg = "new phone call event. incomming number : "+incomingnumber; int duration = toast.length_long; toast toast = toast.maketext(context, msg, duration); toast.show(); } } } }
above android 6.0 need handle bit different permissions:
import android.manifest; import android.content.pm.packagemanager; import android.os.bundle; import android.support.v7.app.appcompatactivity; import android.widget.toast; public class mainactivity extends appcompatactivity { private static final int my_request_code = 1234; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); } @override protected void onresume() { super.onresume(); if (checkselfpermission(manifest.permission.read_phone_state) != packagemanager.permission_granted) { requestpermissions(new string[]{manifest.permission.read_phone_state}, my_request_code); } } public void onrequestpermissionresult(int requestcode, string[] permissions, int[] grantresults) { if (requestcode == my_request_code) { if (grantresults[0] == packagemanager.permission_granted) { // user should able use camera toast.maketext(this, "i have access", toast.length_short).show(); } else { toast.maketext(this, "i don't have access", toast.length_short).show(); } } } }
you must allow permissions @ first time run:
here screenshot of working code:
Comments
Post a Comment