Android 9 · 10에서 BroadcastReceiver를 사용하여 수신 번호를 얻지 못할 때의 메모
하고 싶은 일
전화가 걸릴 때 걸려온 번호를 얻고 싶습니다.
전화 상태 얻기 Receiver
먼저 검색하고 잘 쓰여진 코드로 시도했습니다.
Android.Manifest.xml<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.callreceivetest">
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
※TextView는 전화번호를 표시하기 위해
MainActivity.java TextView callinfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
callinfo=findViewById(R.id.callinfo);
//リスナー設定
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
telephonyManager.listen(mListener, PhoneStateListener.LISTEN_CALL_STATE);
}
PhoneStateListener mListener = new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String callNumber) {
//Log.d(TAG, ":" + state+"-PhoneNumber:"+callNumber);
switch(state){
case TelephonyManager.CALL_STATE_IDLE: //待ち受け(終了時)
Toast.makeText(MainActivity.this, "通話終了\nCALL_STATE_IDLE", Toast.LENGTH_SHORT).show();
break;
case TelephonyManager.CALL_STATE_RINGING: //着信*
if(callNumber==null){
callNumber="";
}
Toast.makeText(MainActivity.this, "着信中\nCALL_STATE_RINGING: " + callNumber, Toast.LENGTH_SHORT).show();
callinfo.setText("着信:"+callNumber);
break;
case TelephonyManager.CALL_STATE_OFFHOOK: //通話
Toast.makeText(MainActivity.this, "通話中\nCALL_STATE_OFFHOOK", Toast.LENGTH_SHORT).show();
break;
}
}
};
이 코드를 Android 10 에뮬레이터에서 실행하면 이미지와 같이 전화 상태를 얻을 수 있지만 전화 번호는 왜인지 얻을 수 없습니다.
전화번호를 얻을 수 없는 원인
Android9 · 10 (API 레벨 28 이상)부터 BroadcastReceiver를 사용하여 전화 번호를 얻는 데 필요한 권한이 변경된 것 같습니다.
참고 사이트: htps : //로 ゔぇぺぺr. 안 d로이 d. 코 m/아보 t/ゔぇr 시온 s/피에/안 d로이 d-9. 0-찬 s? hl = 그럼 # st ct t 어서 s-p
이번에는 onCallStateChanged()를 사용하여 취득하므로 READ_PHONE_STATE(전화) 외에 READ_CALL_LOG(통화 이력) 권한이 필요합니다.
그러나 Android Developers 사이트에는 READ_PHONE_STATE 권한이 필요하지 않습니다. (실제로 에뮬레이터로 확인했습니다)
따라서 모든 버전을 지원하려면 READ_PHONE_STATE와 READ_CALL_LOG의 두 가지 권한이 필요합니다.
수정 후
Android.Manifest.xml<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.callreceivetest">
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
'통화 내역' 권한으로 변경한 결과
Android10에서도 제대로 전화 번호를 얻을 수있었습니다!
참고 사이트
프로그램 : htps : //s와 ry 보아 rd. jp/bぉg/안 d로이 d_테l 마나게 r/
착신·통화중·통화 종료 이외의 상태를 취득하고 싶을 때는, 여기를 참고로 하면 알기 쉽습니다.
htps : // 코 m / 슈카이 / ms / d4911590 001d401 028
Reference
이 문제에 관하여(Android 9 · 10에서 BroadcastReceiver를 사용하여 수신 번호를 얻지 못할 때의 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Rabbit_Program/items/83b547fa70cf05216636
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
먼저 검색하고 잘 쓰여진 코드로 시도했습니다.
Android.Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.callreceivetest">
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
※TextView는 전화번호를 표시하기 위해
MainActivity.java
TextView callinfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
callinfo=findViewById(R.id.callinfo);
//リスナー設定
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
telephonyManager.listen(mListener, PhoneStateListener.LISTEN_CALL_STATE);
}
PhoneStateListener mListener = new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String callNumber) {
//Log.d(TAG, ":" + state+"-PhoneNumber:"+callNumber);
switch(state){
case TelephonyManager.CALL_STATE_IDLE: //待ち受け(終了時)
Toast.makeText(MainActivity.this, "通話終了\nCALL_STATE_IDLE", Toast.LENGTH_SHORT).show();
break;
case TelephonyManager.CALL_STATE_RINGING: //着信*
if(callNumber==null){
callNumber="";
}
Toast.makeText(MainActivity.this, "着信中\nCALL_STATE_RINGING: " + callNumber, Toast.LENGTH_SHORT).show();
callinfo.setText("着信:"+callNumber);
break;
case TelephonyManager.CALL_STATE_OFFHOOK: //通話
Toast.makeText(MainActivity.this, "通話中\nCALL_STATE_OFFHOOK", Toast.LENGTH_SHORT).show();
break;
}
}
};
이 코드를 Android 10 에뮬레이터에서 실행하면 이미지와 같이 전화 상태를 얻을 수 있지만 전화 번호는 왜인지 얻을 수 없습니다.
전화번호를 얻을 수 없는 원인
Android9 · 10 (API 레벨 28 이상)부터 BroadcastReceiver를 사용하여 전화 번호를 얻는 데 필요한 권한이 변경된 것 같습니다.
참고 사이트: htps : //로 ゔぇぺぺr. 안 d로이 d. 코 m/아보 t/ゔぇr 시온 s/피에/안 d로이 d-9. 0-찬 s? hl = 그럼 # st ct t 어서 s-p
이번에는 onCallStateChanged()를 사용하여 취득하므로 READ_PHONE_STATE(전화) 외에 READ_CALL_LOG(통화 이력) 권한이 필요합니다.
그러나 Android Developers 사이트에는 READ_PHONE_STATE 권한이 필요하지 않습니다. (실제로 에뮬레이터로 확인했습니다)
따라서 모든 버전을 지원하려면 READ_PHONE_STATE와 READ_CALL_LOG의 두 가지 권한이 필요합니다.
수정 후
Android.Manifest.xml<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.callreceivetest">
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
'통화 내역' 권한으로 변경한 결과
Android10에서도 제대로 전화 번호를 얻을 수있었습니다!
참고 사이트
프로그램 : htps : //s와 ry 보아 rd. jp/bぉg/안 d로이 d_테l 마나게 r/
착신·통화중·통화 종료 이외의 상태를 취득하고 싶을 때는, 여기를 참고로 하면 알기 쉽습니다.
htps : // 코 m / 슈카이 / ms / d4911590 001d401 028
Reference
이 문제에 관하여(Android 9 · 10에서 BroadcastReceiver를 사용하여 수신 번호를 얻지 못할 때의 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Rabbit_Program/items/83b547fa70cf05216636
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.callreceivetest">
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Android10에서도 제대로 전화 번호를 얻을 수있었습니다!
참고 사이트
프로그램 : htps : //s와 ry 보아 rd. jp/bぉg/안 d로이 d_테l 마나게 r/
착신·통화중·통화 종료 이외의 상태를 취득하고 싶을 때는, 여기를 참고로 하면 알기 쉽습니다.
htps : // 코 m / 슈카이 / ms / d4911590 001d401 028
Reference
이 문제에 관하여(Android 9 · 10에서 BroadcastReceiver를 사용하여 수신 번호를 얻지 못할 때의 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Rabbit_Program/items/83b547fa70cf05216636
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Android 9 · 10에서 BroadcastReceiver를 사용하여 수신 번호를 얻지 못할 때의 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Rabbit_Program/items/83b547fa70cf05216636텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)