1

私は電話を録音できるAndroidアプリを開発しようとしています。だから、最初のステップでは、私はBroadcastReceiverが解雇されているかどうかを見なければなりません。 AndroidManifestファイルに受信者タグを追加しました。私はOnePlus Xでテストしています。アクティビティは開始されますが、コールを受信するとBroadcastReceiverは起動しません。ここで何がうまくいかないの?Androidの着信コールのBroadcastReceiverが機能しない

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.myapp"> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

    <activity 
     android:name="com.example.myapp.MainActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

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

</application> 

</manifest> 

PhoneStateReceiver.Java

package com.example.myapp; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.TelephonyManager; 
import android.widget.Toast; 

public class PhoneStateReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     try { 
      System.out.println("Receiver start"); 
      String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
      String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 

      if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){ 
       Toast.makeText(context,"Incoming Call State",Toast.LENGTH_SHORT).show(); 
       Toast.makeText(context,"Ringing State Number is -"+incomingNumber,Toast.LENGTH_SHORT).show(); 


      } 
      if ((state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK))){ 
       Toast.makeText(context,"Call Received State",Toast.LENGTH_SHORT).show(); 
      } 
      if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)){ 
       Toast.makeText(context,"Call Idle State",Toast.LENGTH_SHORT).show(); 
      } 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     } 

    } 
} 
+0

https://stackoverflow.com/a/15564021/4063532これを確認してください –

+0

権限はどこですか? –

+0

@EliasFazel下部から2番目のライン。アンドロイド・スタジオが注文エラーを報告したので、私はトップに移動しました。 – Tezz

答えて

0

許可READ_PHONE_STATEあなたはマシュマロデバイス上にある場合、あなたの放送受信機が動作しませんしませんどちらも、それはエラーがスローされます、他のランタイム許可を要求しなければならない、危険な権限です。

これは、インテントフィルタに正しく登録されているため、ブロードキャスト受信者だけで動作する必要がある、つまりAndroidシステムから呼び出されるため、何も問題はないため、 。

関連する問題