我想检测android应用程序中的传出调用.实际上我可以检测拨出电话,但它也适用于传入,我不希望这样.我需要它只为外向工作.这是我的代码....
boolean ringing = false;
boolean offhook = false;
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
if((!ringing)&& offhook){
///incomming call
}
break;
case TelephonyManager.CALL_STATE_RINGING:
callerPhoneNumber = incomingNumber;
Log.d(TAG, "RINGING");
ringing = true;
offhook = false;
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d(TAG, "OFFHOOK");
offhook = true;
ringing = false;
break;
}
Run Code Online (Sandbox Code Playgroud) 有没有机会将TELEPHONY_SERVICE作为null?
TelephonyManager teleman = (TelephonyManager) getBaseContext()
.getSystemService(Context.TELEPHONY_SERVICE);
Run Code Online (Sandbox Code Playgroud)
我的意思是在上面的行中有没有机会让teleman成为null?
在此先感谢您的回复.
我收到两个错误,指出令牌上的语法错误,ConstructorHeaderName 预期相反 & 令牌“(”上的语法错误,<预期
在线上:
mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE);
Run Code Online (Sandbox Code Playgroud)
...有什么建议么?
public class DataCountService extends Service {
String text = "USR;1";
String ERROR = Constants.PREFS_NAME;
private Timer timer = new Timer();
private long period;
private long delay_interval;
EndCallListener callListener = new EndCallListener();
TelephonyManager mTM = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE);
private class EndCallListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if(TelephonyManager.CALL_STATE_RINGING == state) {
// Log.i(LOG_TAG, "RINGING, number: " + incomingNumber);
}
if(TelephonyManager.CALL_STATE_OFFHOOK == state) {
//wait for phone to go …Run Code Online (Sandbox Code Playgroud) 我需要自动接听电话(取决于来源电话号码).这时,我可以结束来电,但不能接受'.
我找到了几个例子,这就是我现在所拥有的.
添加到AndroidManifest:
<permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
...
<receiver android:name=".panic.IncomingCallReceiver">
<intent-filter android:priority="100">
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
public class IncomingCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
MyPhoneStateListener listener = new MyPhoneStateListener(context);
telephony.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
}
public class MyPhoneStateListener extends PhoneStateListener {
Context context;
public MyPhoneStateListener(Context context) {
super();
this.context = context;
}
@Override
public void onCallStateChanged(int state, String callingNumber) {
super.onCallStateChanged(state, callingNumber); …Run Code Online (Sandbox Code Playgroud) 在发布 apk 以播放商店时,我发现我的应用程序需要该android.hardware.telephony功能,但我没有在清单中的任何地方添加它。我还检查了 android studio 中的合并清单,它也不包含此功能,因此我认为没有第三方 sdk 会添加此功能。此功能的来源可能是什么?
作为参考,我在清单中声明了以下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)
此外,当我使用以下代码将其设为可选时,该应用程序可在没有此功能的设备上使用:
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />
Run Code Online (Sandbox Code Playgroud)
那么为什么默认情况下需要而不在任何地方添加它呢?
我目前无法让我的应用程序向用户发送对话以在 API 29 上设置默认拨号器,但相同的代码在 Android 10 (Q) 下运行良好。
我测试了这个“无响应”意图提示用户设置短信示例的默认处理程序,但不适用于我的。然后我按照https://developer.android.com/guide/topics/permissions/default-handlers但没有解决我的问题。API 级别 29 或更高版本是否有任何特殊更改可以让用户设置默认应用程序?
这是我的工作代码(适用于 Android 10 以下)
TelecomManager telecomManager = (TelecomManager) getSystemService(TELECOM_SERVICE);
if (!getPackageName().equals(telecomManager.getDefaultDialerPackage())) {
Intent intent = new Intent(ACTION_CHANGE_DEFAULT_DIALER)
.putExtra(EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, getPackageName());
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
我在 logcat 中得到的内容在这里
android android-intent telephonymanager android-permissions android-10.0
我的Android应用监控蜂窝信号强度.在CDMA设备上,它没有任何问题.在许多 GSM设备上,它没有任何问题.但是,在某些 GSM设备上,我收到强制关闭,并显示以下错误消息:
java.lang.ClassCastException:android.telephony.cdma.CdmaCellLocation无法强制转换为android.telephony.gsm.GsmCellLocation
我相当肯定这个问题发生在美国的一些三星设备上,当他们收到4G LTE信号时; 我相信它也会出现在其他设备和国家.我仍在尝试确定所涉及的确切服务提供商和设备.
以下是MyService.java的相关代码片段; 我已将错误消息引用的行标记为//********:
public void onCreate() {
tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
...
}
public int onStartCommand(Intent in, int flags, int startId) {
signalStrengthListener = new SignalStrengthListener();
((TelephonyManager)getSystemService(TELEPHONY_SERVICE)).listen(signalStrengthListener, SignalStrengthListener.LISTEN_SIGNAL_STRENGTHS | SignalStrengthListener.LISTEN_SERVICE_STATE | SignalStrengthListener.LISTEN_DATA_CONNECTION_STATE | SignalStrengthListener.LISTEN_CELL_LOCATION);
return START_STICKY;
...
}
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
isGSM = signalStrength.isGsm();
if (isGSM == true) {
GCellLoc = (GsmCellLocation)tm.getCellLocation(); //********
...
}
Run Code Online (Sandbox Code Playgroud)
android.telephony.cdma如果仅在isGSM返回true 时触发此代码,则不确定为什么会出现任何内容.也许当检测到LTE信号时,就Android API而言,这会使手机处于某种双CDMA/GSM模式?我无法找到任何类似行为的文档.我怎么能在我的代码中处理这个?谢谢.
Java developers had used reflection for reaching endcall method of ITelephony until 2.3, in order to end incoming call, but this method has been prevented later, so it is nonaccessible via c# in monodroid neither.
Is there any way to do it in 'Mono For Android'?
我正在创建一个应用程序,我正在尝试的是每当用户切断或断开呼叫时,一个警报对话框应该出现调用者的号码,我按照本教程
public class MyCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) {
// get the phone number
String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
Toast.makeText(context, "Call from:" +incomingNumber, Toast.LENGTH_LONG).show();
Intent i = new Intent(context, Disp_Alert_dialog.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("Number", incomingNumber);
context.startActivity(i);
// This code will execute when the phone has an incoming call
} else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_IDLE)
|| intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_OFFHOOK)) {
// This code will execute when the call is disconnected …Run Code Online (Sandbox Code Playgroud) 有没有办法在两张SIM卡上获得信号强度.我搜索了很多但我找不到任何解决方案.也许有没有办法在第二张SIM卡上注册接收器?我正在使用Android 5.0,我知道在这个版本上Android官方不支持双SIM卡解决方案.我发现只有这个几乎适合我: 检查手机是否是双卡双待 Android双卡信号强度
第二个链接提供了一些方法但我不能使用它因为方法TelephonyManager.listenGemini不可用
有帮助吗?
android ×10
telephonymanager ×10
java ×2
android-10.0 ×1
c# ×1
dual-sim ×1
gsm ×1
listener ×1
lte ×1
phone-call ×1
syntax ×1
telephony ×1