シリーズを作るアプリケーションを開発しています次々に呼び出します。通話が終了したことを検出するために、通話が終了したときに正常にトリガーされるBroadcast Receiverを作成しましたが、電話番号を取得できません。これが私のコードです
public class EndCallReceiver extends BroadcastReceiver {
Preferences pref;
Context ctx;
@Override
public void onReceive(Context context, Intent intent) {
ctx = context;
pref = new Preferences(ctx);
Bundle extras = intent.getExtras();
if (extras != null) {
String state = extras.getString(TelephonyManager.EXTRA_STATE);
String incomingNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
Toast.makeText( ctx, incomingNumber, Toast.LENGTH_LONG).show();
}
}
}
}
Toastには何も表示されません。 incomingNumberがヌルです。誰でも教えてもらえますか。 BroadcastReceiverを使って電話をかけるにはどうすればよいですか。
回答:
回答№1は1AndroidManifest.xmlにブロードキャストを登録する必要があります。
<receiver android:name=".EndCallReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
あなたのコード:
public class EndCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
String phoneNumber= bundle.getString("incoming_number");
}
}
回答№2の場合は1
問題は、下記が呼び出されたときに電話番号が関連付けられていないことです。
if (state.equals(TelephonyManager.EXTRA_STATE_IDLE))
以下のコードを試してください:
電話が鳴ったときに電話番号が保存され、後で電話がかかったとき が切断され、前の番号が表示されます。
public class CallReceiver extends BroadcastReceiver {
static boolean isRinging = false;
String number = "";
@Override
public void onReceive(Context context, Intent intent) {
Log.v("ranjith", "entered onregister");
// Get the current Phone State
String phoneState = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if (phoneState == null)
return;
// If phone is "Ringing"
if (phoneState.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
isRinging = true;
number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
Log.v("ranjith", "phone ringing");
}
// if phone is idle after ringing
if (phoneState.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
Log.v("ranjith", "call ended of number" + number);
Toast.makeText(context, "Number is " + number, Toast.LENGTH_LONG).show();
}
}
}