android– 如何在接到来电时调用活动.

android– 如何在接到来电时调用活动.,第1张

概述大家好我想在默认的来电活动上调用我自己的活动..我已经使用广播接收器完成此 *** 作我在接听来电时调用我的活动.但是,当我接到来电时,它第一次正常工作,然后默认来电活动即将到来.我不知道有什么问题可以帮助我..表现:<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:and

大家好我想在默认的来电活动上调用我自己的活动..我已经使用广播接收器完成此 *** 作我在接听来电时调用我的活动.但是,当我接到来电时,它第一次正常工作,然后默认来电活动即将到来.我不知道有什么问题可以帮助我..

表现:

<?xml version="1.0" enCoding="utf-8"?><manifest xmlns:androID="http://schemas.androID.com/apk/res/androID"package="com.satish.service"androID:versionCode="1"androID:versionname="1.0" ><uses-sdk androID:minSdkVersion="8" /><uses-permission androID:name="androID.permission.MODIFY_PHONE_STATE" /><uses-permission androID:name="androID.permission.CALL_PHONE" /><uses-permission androID:name="androID.permission.READ_PHONE_STATE" /><application    androID:icon="@drawable/ic_launcher"    androID:label="@string/app_name" >    <receiver        androID:name="Mycallreceiver"        androID:enabled="true" >        <intent-filter androID:priority="10">            <action androID:name="androID.intent.action.PHONE_STATE" >            </action>        </intent-filter>    </receiver>    <receiver        androID:name="TestReceiver"        androID:enabled="true" >        <intent-filter androID:priority="10">            <action androID:name="jason.wei.custom.intent.action.TEST" >            </action>        </intent-filter>    </receiver>    <activity        androID:name="CallActivity"        androID:clearTaskOnLaunch="true"        androID:launchMode="singleTask" >        <intent-filter androID:priority="1000"></intent-filter>    </activity></application></manifest>

Java代码:

public class Mycallreceiver extends broadcastReceiver{ public static final String CUSTOM_INTENT = "jason.wei.custom.intent.action.TEST";Context context = null; private static final String TAG = "Phone call";public voID onReceive(Context context, Intent intent) {    Bundle extras = intent.getExtras();    if (extras != null) {        String state = extras.getString(TelephonyManager.EXTRA_STATE);        Log.w("DEBUG", state);        if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {                    Intent i = new Intent();                    i.setAction(CUSTOM_INTENT);                    context.sendbroadcast(i);        }    }}}public class TestReceiver extends broadcastReceiver {public voID onReceive(Context context, Intent intent) {    if (intent.getAction().equals(Mycallreceiver.CUSTOM_INTENT)) {        System.out.println("GOT THE INTENT");        context.startActivity(new Intent(context, CallActivity.class)                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));    }}}public class CallActivity extends Activity implements OnClickListener{private ITelephony telephonyService;protected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.main);    settheme(androID.R.style.theme_Dialog);    ((button)findVIEwByID(R.ID.call)).setonClickListener(this);    ((button)findVIEwByID(R.ID.end)).setonClickListener(this);    TelephonyManager telephony = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);        try {           Class c = Class.forname(telephony.getClass().getname());           Method m = c.getDeclaredMethod("getITelephony");           m.setAccessible(true);           telephonyService = (ITelephony) m.invoke(telephony);          } catch (Exception e) {           e.printstacktrace();          }}@OverrIDepublic voID onClick(VIEw arg0) {    switch (arg0.getID()) {    case R.ID.call:        telephonyService.answerRingingCall();        break;    case R.ID.end:        telephonyService.endCall();        finish();        break;    default:        break;    }}}

解决方法:

实际上完整的代码是我发布上面只是替换下面的代码

public class TestReceiver extends broadcastReceiver{public voID onReceive(Context context, Intent intent) {if (intent.getAction().equals(Mycallreceiver.CUSTOM_INTENT)) {    System.out.println("GOT THE INTENT");    context.startActivity(new Intent(context, CallActivity.class)            .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));}} }

使用以下代码

 public class TestReceiver extends broadcastReceiver{@OverrIDepublic voID onReceive(final Context context, Intent intent) {    if (intent.getAction().equals(Mycallreceiver.CUSTOM_TEST_INTENT)) {        System.out.println("GOT THE INTENT");        final String mobileNumber = intent.getExtras().getString("number");        Thread thread = new Thread(){            private int sleepTime = 400;            @OverrIDe            public voID run() {                super.run();                try {                    int wait_Time = 0;                    while (wait_Time < sleepTime ) {                        sleep(100);                        wait_Time += 100;                    }                }catch (Exception e) {                    Toast.makeText(context,                            "Error Occured Because:" + e.getMessage(),                            Toast.LENGTH_SHORT).show();                }                finally {                }                context.startActivity(new Intent(context, CallActivity.class).putExtra("number", mobileNumber)                        .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));            }        };        thread.run();    }} }
总结

以上是内存溢出为你收集整理的android – 如何在接到来电时调用活动.全部内容,希望文章能够帮你解决android – 如何在接到来电时调用活动.所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1105743.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存