gpt4 book ai didi

Android、TelephonyManager、PhoneStateListener 的乐趣和来电

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:25:20 31 4
gpt4 key购买 nike

我刚刚接触 Android 开发,并决定我在这个新领域的第一个征服将是掌握手机对来电的 react 。

后来我用谷歌搜索了一下 http://www.compiletimeerror.com/2013/08/android-call-state-listener-example.html#.Vi3Ren4vfwM (所以我的代码与他/她的代码非常相似)。

我的主要(也是唯一) Activity 如下所示:

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TelephonyManager TelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
TelephonyMgr.listen(new TeleListener(),
PhoneStateListener.LISTEN_CALL_STATE);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
class TeleListener extends PhoneStateListener {
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
// CALL_STATE_IDLE;
Log.d("MyLittleDebugger", "I'm in " + state + " and the number is " + incomingNumber);
Toast.makeText(getApplicationContext(), "CALL_STATE_IDLE",
Toast.LENGTH_LONG).show();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
// CALL_STATE_OFFHOOK;
Log.d("MyLittleDebugger", "I'm in " + state + " and the number is " + incomingNumber);
Toast.makeText(getApplicationContext(), "CALL_STATE_OFFHOOK",
Toast.LENGTH_LONG).show();
break;
case TelephonyManager.CALL_STATE_RINGING:
// CALL_STATE_RINGING
Log.d("MyLittleDebugger", "I'm in " + state + " and the number is " + incomingNumber);
Toast.makeText(getApplicationContext(), incomingNumber,
Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), "CALL_STATE_RINGING",
Toast.LENGTH_LONG).show();
break;
default:
break;
}
}

}
}

现在,乐趣就到此为止了。我让该应用程序在模拟器上运行,并使用 DDMS 向我的模拟设备进行了几次电话欺骗,以查看 fragment 落在何处。

肯定有足够多的 toast 弹出,并且 MyLittleDebugger 在状态交换时爆发。监听器正在工作,但是我的日志或 toast 中从未显示任何数字。

本应是数字的地方只是一片空白!不为空或任何东西,不,但空白!

经过更多的谷歌搜索,我意识到我的 AndroidManifest.xml 可能是问题所在。具体如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.x.xy" >

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

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

现在,问题来了:我错过了什么?

很明显,某处有一小部分出了问题,因为我可以让我的 TelephonyMgr 对象 .listen() 调用状态,但我可以'获取要显示的数字。

新信息:

我也在我的手机上试过这个,但没有模拟到完全相同的结果。

最佳答案

您可能需要使用广播接收器来帮助您实现目标。创建扩展广播接收器的类,并在其中 try catch 传入的号码。

public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(final Context context, Intent intent) {
TelephonyManager mtelephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
mtelephony.listen(new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
// CALL_STATE_RINGING
Log.d("MyLittleDebugger", "I'm in " + state + " and the number is " + incomingNumber);
Toast.makeText(getApplicationContext(), incomingNumber,
Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), "CALL_STATE_RINGING",
Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
},PhoneStateListener.LISTEN_CALL_STATE);
}

并且在您的 list 中也有这一行。

        <receiver android:name=".MyReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>

关于Android、TelephonyManager、PhoneStateListener 的乐趣和来电,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33340628/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com