如何调用/启动一个应用程序调用结束时? [英] How to Invoke/Start an application when a call is ended?

查看:122
本文介绍了如何调用/启动一个应用程序调用结束时?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在code,我是presently使用如下:

我的主类

 公共类指数扩展的BroadcastReceiver {

        @覆盖
        公共无效的onReceive(上下文的背景下,意图意图){

            TelephonyManager telephonyManager =(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
            telephonyManager.listen(新CustomPhoneStateListener(上下文),PhoneStateListener.LISTEN_CALL_STATE);
        }
    }
 

CustomPhoneStateListener类

 公共类CustomPhoneStateListener扩展PhoneStateListener {

        公共活动ACTIV =新的活动(){
            公共无效startActivity(意向我){}
            };
            上下文语境;
        公共CustomPhoneStateListener(上下文的背景下){
            超();
            this.context =背景;
        }
        @覆盖
        公共无效onCallStateChanged(INT状态,串incomingNumber){
            super.onCallStateChanged(州,incomingNumber);
           开关(州){
            案例TelephonyManager.CALL_STATE_IDLE:

                Toast.makeText(背景下,通话已结束,Toast.LENGTH_SHORT).show();
    //该过程转移到下一个应用程序。
                    意图I =新的意图(Intent.ACTION_MAIN);
                PackageManager经理= activ.getPackageManager();
I = manager.getLaunchIntentForPackage(com.timetracker.app);对于我的新的应用程序//包名
                i.addCategory(Intent.CATEGORY_LAUNCHER);
                activ.startActivity(ⅰ);
                打破;
        案例TelephonyManager.CALL_STATE_OFFHOOK:

                Toast.makeText(背景下,电话呼叫采取Toast.LENGTH_SHORT).show();
                打破;
            案例TelephonyManager.CALL_STATE_RINGING:

                振铃时//
                Toast.makeText(背景下,电话响起来,Toast.LENGTH_SHORT).show();
                打破;
                默认:
                打破;
            }
        }
    }
 

和Android清单文件:

 < XML版本=1.0编码=UTF-8&GT?;
<舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
      包=com.android.call
      安卓版code =1
      机器人:VERSIONNAME =1.0>
    <使用-SDK安卓的minSdkVersion =8/>

    <应用机器人:图标=@可绘制/图标机器人:标签=@字符串/ APP_NAME>
                <接收器的Andr​​oid版本:NAME =指数>
                  <意向滤光器>
               <作用机器人:名称=android.intent.action.PHONE_STATE/>
               <作用机器人:名称=android.view.InputMethod/>
                &所述; /意图滤光器>
                < /接收器>
< /用途>

    <使用-权限的Andr​​oid:名称=android.permission.READ_PHONE_STATE/>
    <使用-权限的Andr​​oid:名称=android.permission.CALL_PHONE/>
< /舱单>
 

通过使用上述code,我能够得到的,我在执行各自的操作敬酒的消息,但我不能给任何意图或使用<强> Package_Manger 我不能够转移到下一个应用程序。

在log_cat消息返回尝试执行$ C $下调用应用程序时:

  D / AndroidRuntime(312):关闭虚拟机
:W / dalvikvm(312):主题ID = 1:螺纹退出与未捕获的异常(组= 0x4001d800)
 致命异常:主要
  E / AndroidRuntime(312):显示java.lang.NullPointerException
  E / AndroidRuntime(312):在android.content.ContextWrapper.getPackageManager(ContextWrapper.java:85)
  E / AndroidRuntime(312):在com.android.call.CustomPhoneStateListener.onCallStateChanged(CustomPhoneStateListener.java:39)
  E / AndroidRuntime(312):在android.telephony.PhoneStateListener $ 2.handleMessage(PhoneStateListener.java:319)
  E / AndroidRuntime(312):在android.os.Handler.dispatchMessage(Handler.java:99)
  E / AndroidRuntime(312):在android.os.Looper.loop(Looper.java:123)
  E / AndroidRuntime(312):在android.app.ActivityThread.main(ActivityThread.java:4627)
  E / AndroidRuntime(312):在java.lang.reflect.Method.invokeNative(本机方法)
  E / AndroidRuntime(312):在java.lang.reflect.Method.invoke(Method.java:521)
  E / AndroidRuntime(312):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
   E / AndroidRuntime(312):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
   E / AndroidRuntime(312):在dalvik.system.NativeStart.main(本机方法)
 

解决方案

它看起来像问题是从使用来临主动这样的声明:

 公开活动ACTIV =新的活动(){
        公共无效startActivity(意向我){}
    };
 

在这里,你要创建一个没有上下文的新活动。也许你应该只是传递活动到您的权利CustomPhoneStateListener,而不是Context。或者使用上下文获得PackageManager:

PackageManager经理= context.getPackageManager();

The code that I am presently using is as follows:

My main class

  public class Index extends  BroadcastReceiver{ 

        @Override
        public void onReceive(Context context, Intent intent) {

            TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            telephonyManager.listen(new CustomPhoneStateListener(context), PhoneStateListener.LISTEN_CALL_STATE);
        }
    }

the CustomPhoneStateListener class

    public class CustomPhoneStateListener extends PhoneStateListener {

        public  Activity activ=new Activity(){
            public void startActivity(Intent i) {}
            };
            Context context; 
        public CustomPhoneStateListener(Context context) {
            super();
            this.context = context;
        }
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            super.onCallStateChanged(state, incomingNumber);
           switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:

                Toast.makeText(context, "call has ended", Toast.LENGTH_SHORT).show();
    // The process to transfer to the next application. 
                    Intent i = new Intent(Intent.ACTION_MAIN);
                PackageManager manager = activ.getPackageManager();
i = manager.getLaunchIntentForPackage("com.timetracker.app");// package  name for my new app
                i.addCategory(Intent.CATEGORY_LAUNCHER);
                activ.startActivity(i);
                break;
        case TelephonyManager.CALL_STATE_OFFHOOK:

                Toast.makeText(context, "Phone call has taken", Toast.LENGTH_SHORT).show();
                break;
            case TelephonyManager.CALL_STATE_RINGING:

                //when Ringing
                Toast.makeText(context, "Phone is ringing", Toast.LENGTH_SHORT).show();
                break;
                default:
                break;
            }
        }
    }

and the Android Manifest file as:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.android.call"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
                <receiver android:name=".Index" >
                  <intent-filter>
               <action android:name="android.intent.action.PHONE_STATE"/>
               <action android:name="android.view.InputMethod" /> 
                </intent-filter>
                </receiver>
</application>

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

By using the above code I am able to get the toast message for the respective actions that I am performing ,but I am not able to give any Intent or by using the Package_Manger I am not able to shift to the next app.

The log_cat message returned when trying to execute the code for invoking the app:

 D/AndroidRuntime(312): Shutting down VM
: W/dalvikvm(312): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
 FATAL EXCEPTION: main
  E/AndroidRuntime(312): java.lang.NullPointerException 
  E/AndroidRuntime(312):    at android.content.ContextWrapper.getPackageManager(ContextWrapper.java:85)
  E/AndroidRuntime(312):    at com.android.call.CustomPhoneStateListener.onCallStateChanged(CustomPhoneStateListener.java:39)
  E/AndroidRuntime(312):    at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:319)
  E/AndroidRuntime(312):    at android.os.Handler.dispatchMessage(Handler.java:99)
  E/AndroidRuntime(312):    at android.os.Looper.loop(Looper.java:123)
  E/AndroidRuntime(312):    at android.app.ActivityThread.main(ActivityThread.java:4627)
  E/AndroidRuntime(312):    at java.lang.reflect.Method.invokeNative(Native Method)
  E/AndroidRuntime(312):    at java.lang.reflect.Method.invoke(Method.java:521)
  E/AndroidRuntime(312):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
   E/AndroidRuntime(312):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
   E/AndroidRuntime(312):   at dalvik.system.NativeStart.main(Native Method)

解决方案

It looks like the problem is coming from the use of active declared like this:

    public  Activity activ=new Activity(){
        public void startActivity(Intent i) {}
    };

Here you're creating a new Activity without a context. Maybe you should just pass the Activity right into your CustomPhoneStateListener instead of the Context. Or use the context to get the PackageManager:

PackageManager manager = context.getPackageManager();

这篇关于如何调用/启动一个应用程序调用结束时?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆