我正在运行以下代码,其编译,但我没有得到任何结果或土司显示,请帮助。。。
CustomBroadcastReceiver.java该类将接收动作电话状态更改,并将实例化为Customephonestatelistener
public class CustomBroadcastReceiver extends BroadcastReceiver {
TelephonyManager telephony =
(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
CustomPhoneStateListener customPhoneListener = new CustomPhoneStateListener(context);
telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
Bundle bundle = intent.getExtras();
String phoneNr= bundle.getString("incoming_number");
Log.v(TAG, "phoneNr: "+phoneNr);
Toast toast = Toast.makeText(context, "phoneNr: "+phoneNr, Toast.LENGTH_LONG);
toast.show();
}
}
CustomPhonestateListener。JAVA
这个类是主操作类
public class CustomPhoneStateListener extends PhoneStateListener {
private static final String TAG = "CustomPhoneStateListener";
private Context mContext;
public CustomPhoneStateListener(Context context) {
// TODO Auto-generated constructor stub
mContext = context;
}
public void onCallStateChanged(int state, String incomingNumber){
Log.v(TAG, "WE ARE INSIDE!!!!!!!!!!!");
Log.v(TAG, incomingNumber);
Toast toast = Toast.makeText(mContext, "WE ARE INSIDE!!!!!!!!!!!", Toast.LENGTH_LONG);
toast.show();
switch(state){
case TelephonyManager.CALL_STATE_RINGING:
Log.d(TAG, "RINGING");
break;
}
AndroidManifest。xml
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
</application>
"但现在的问题是我必须重新启动设备才能启动这项服务...任何建议,我错了吗??"
您必须重新启动手机的原因是在您的AndroidManifest中。您只允许执行一个操作的xml文件。。。
<!-- Your Problem is here -->
<action android:name="android.intent.action.BOOT_COMPLETED" />
您已经将BroadcastRecector设置为仅在手机启动时启动。
要解决此问题,您需要使用DR VOLT提供的答案。
只需将操作PHONE_STATE和NEW_OUTGOING_CALL添加到您的接收器
例如:
<receiver android:name=".MyReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
当这些动作发生时,这将启动广播接收器。
问题在你的清单文件中,你必须有这个:
<receiver android:name=".MyReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
而不是:
<receiver android:name=".MyReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
谢谢你的回答。。。我尝试了另一种方法,下面的代码似乎有效。。已加入receiver和phonestatelistener。。但现在的问题是我必须重新启动设备才能启动此服务。。有没有任何关于我现在错在哪里的建议??
public class IncomingCallReciever extends BroadcastReceiver {
private Context mContext;
private Intent mIntent;
@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
mIntent = intent;
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
int events = PhoneStateListener.LISTEN_CALL_STATE;
tm.listen(phoneStateListener, events);
}
private final PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
String callState = "UNKNOWN";
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
callState = "IDLE";
break;
case TelephonyManager.CALL_STATE_RINGING:
// -- check international call or not.
if (incomingNumber.startsWith("00")) {
Toast.makeText(mContext,"International Call- " + incomingNumber,Toast.LENGTH_LONG).show();
callState = "International - Ringing (" + incomingNumber+ ")";
} else {
Toast.makeText(mContext, "Local Call - " + incomingNumber, Toast.LENGTH_LONG).show();
callState = "Local - Ringing (" + incomingNumber + ")";
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
String dialingNumber = mIntent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
if (dialingNumber.startsWith("00")) {
Toast.makeText(mContext,"International - " + dialingNumber,Toast.LENGTH_LONG).show();
callState = "International - Dialing (" + dialingNumber+ ")";
} else {
Toast.makeText(mContext, "Local Call - " + dialingNumber,Toast.LENGTH_LONG).show();
callState = "Local - Dialing (" + dialingNumber + ")";
}
break;
}
Log.i(">>>Broadcast", "onCallStateChanged " + callState);
super.onCallStateChanged(state, incomingNumber);
}
};
}
背景: 我为android写了一个简单的小拨号器,可以拨打联系人的电话号码 问题: 我想打电话给联系人,而不是电话号码,这样Android: 如果联系人有两个号码:将启动电话号码选择对话框,然后启动通话 当然,我可以从头开始实现一个弹出窗口,但我更愿意委托给一个标准操作,这样用户就可以使用与使用标准拨号器相同的用户体验。
我想从Android的联系簿中获得电话号码。我尝试了许多方法,但我无法获得电话号码。我有联系人姓名和状态,但当我尝试获取电话号码时,它不起作用。我的代码是。
我想弄清楚这个验证手机号码到我的Android系统是如何工作的。 我已经添加了代码和whant来验证46123456789,但最后一个号码(9)没有添加到电话号码中。 我用的是: 我是不是错过了什么
问题内容: 我正在尝试根据给定的联系人电话号码检索联系人姓名。我做了一个可以在所有API版本中使用的函数,因为我无法使其在1.6版中运行,而且我也看不到问题所在,也许有人可以发现它? 请注意,我已经为字符串替换了API常量,因此没有过时的警告问题。 问题答案: 使用反射而不是比较sdk版本。
我正在开发一个用于录制通话的应用程序。这是我的代码片段。 这适用于android 7以下的设备,但当我使用Android 7移动设备时,我只能听到传出的声音,但听不到传入的声音。 有人能帮我修理它吗?
问题内容: 我正在尝试删除特定号码的所有通话记录。 我想触发查询,因为保存在callLog中的mobNum是+916666666666,我正在传递号码6666666666。因此它不匹配。有人可以帮助我克服这个问题吗? 问题答案: 检查以下链接: 在Android中删除通话记录 SO:通话结束后从通话记录中删除通话