2

ブロードキャストレシーバーを介して着信を認識しようとしています。私はそうすることができません!実際、ブロードキャストを「トリガー」することはできません。

これが私のコードです:

activate.setOnClickListener(new OnClickListener()
        {

            @Override
            public void onClick(View v)
            {
                Toast.makeText(getApplicationContext(),"Clicked",1).show();
                final String BROADCAST_ACTION_NAME = ".BroadcastMM";
                Intent intent = new Intent();  
                intent.setAction(BROADCAST_ACTION_NAME);        
                sendBroadcast(intent); 


            }                                           
            }

この「sendBroadcast」がトリガーされるかどうかはわかりません。私のブロードキャストレシーバーファイルでは:

public void onReceive(Context context, Intent intent)
    {
        if(intent.getAction()=="android.intent.action.PHONE_STATE"){
        Toast.makeText(c,"BroadCast fired!",1).show();}
        Bundle extras = intent.getExtras();
        String state = extras.getString(TelephonyManager.EXTRA_STATE);
        if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
            Toast.makeText(context, "Ringing", 1).show();
        }
}       

私のマニフェストファイル:

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

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

私が見逃しているロジックはありますか?私はAndroidに非常に慣れていないので、助けてください。

4

1 に答える 1

3
intent.getAction()=="android.intent.action.PHONE_STATE"

する必要があります

TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(intent.getAction());

これが文字列(と)を比較する方法だからですequals()

また、ブロードキャストに使用するコードは、決してブロードキャストしないでください".BroadcastMM"。アクションはありません。代わりに明示的なものを作成してみてください。

 Intent intent = new Intent(v.getContext(),BroadcastMM.class);  
 sendBroadcast(intent);

android.intent.action.PHONE_STATEまた、ブロードキャストできない可能性が高いifため、明示的なインテントを作成すると実行されません。

BroadcastReceiverが機能していることを本当に確認したい場合は、すべてのifの外にプリントアウト/トーストを配置します。次に、BroadcastReceiverが応答することを確認したら、チェックを行います。ただし、リッスンするインテントフィルターは1つだけなので、インテントがインテントであるかどうかを確認するのはPHONE_STATE少し冗長であることに注意してください。

于 2013-03-06T20:53:50.250 に答える