/ /サービスとBroadCastReceiver-android、service、android-activity、broadcastreceiver

サービスとBroadCastReceiver - アンドロイド、サービス、アンドロイド - アクティビティ、ブロードキャスト受信者

実装方法の例をいくつか見てきましたBroadCastReceiverですが、保留中のインテント(電話の着信など)に応答する必要があるサービスをどのように実装する必要がありますか... 実際、私は同じ「問題」について疑問に思っていましたが、アクティビティにあります。 あなたは明らかにサービスまたはアクティビティを拡張するクラスを持っているので、BroadCastReceiverを拡張することもできません... 「プラットフォーム対応」のサービスやアクティビティを作成できないようです。

回答:

回答№1の場合は12

特定のインテントを受け取るアクティビティを登録するには、次のことを行う必要があります。

// Flag if receiver is registered
private boolean mReceiversRegistered = false;

// I think this is the broadcast you need for something like an incoming call
private String INCOMING_CALL_ACTION = "android.intent.action.PHONE_STATE";

// Define a handler and a broadcast receiver
private final Handler mHandler = new Handler();
private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Handle reciever
String mAction = intent.getAction();

if(mAction.equals(INCOMING_CALL_ACTION) {
// Do your thing
}
}

@Override
protected void onResume() {
super.onResume();

// Register Sync Recievers
IntentFilter intentToReceiveFilter = new IntentFilter();
intentToReceiveFilter.addAction(INCOMING_CALL_ACTION);
this.registerReceiver(mIntentReceiver, intentToReceiveFilter, null, mHandler);
mReceiversRegistered = true;
}

@Override
public void onPause() {
super.onPause();

// Make sure you unregister your receivers when you pause your activity
if(mReceiversRegistered) {
unregisterReceiver(mIntentReceiver);
mReceiversRegistered = false;
}
}

次に、マニフェストにインテントフィルターを追加する必要もあります。

 <activity android:name=".MyActivity" android:label="@string/name" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</activity>

回答№2については4

内部クラスを作成できます

class A extends Activity {
BroadcastReceiver r = new BroadcastReceiver(){
// code to handle broadcase
}
}

そのクラスはイベントを受け取ります。イベントはメインハンドラーに渡すか、外部メソッドを呼び出すだけです。


回答№3の4

実際、TelephonyManagerにリスナーを追加するだけで、電話の着信に対応できます。

Service / ActivityでPhoneStateListenerを定義します

private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {

@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);

switch (state) {
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
case TelephonyManager.CALL_STATE_RINGING:
break;
case TelephonyManager.CALL_STATE_IDLE:
break;
}
}

};

次に、onCreateメソッドで:

mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);

最後に、onDestroyでリスナーをクリアします。

mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);

この場合は非常に簡単です。