0
일부 특정 번호의 벨소리 모드를 변경하는 앱을 개발 중입니다.BraodcastReceiver를 확장하는 클래스를 트리거하는 방법
들어오는 숫자를 얻기 위해 BroadcastReceiver를 확장하는 클래스가 있습니다. 이 클래스의이 ::
package com.example.callchecker;
import android.media.AudioManager;
import android.os.Bundle;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;
public class Main_Activity extends BroadcastReceiver{
private int ringer_mode ;
//private String AM_str;
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
AudioManager AM =(AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
Log.w("start", "starting the Main_Activity");
//Log.w("Ringer_mode at start", AM_str);
//setting the ringer mode on number match
try {
Bundle extras=intent.getExtras();
if (extras !=null){
String state = extras.getString(TelephonyManager.EXTRA_STATE);
//Log.w("MY_DEBUG_TAG",state);
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
String phonenumber = extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
// AM_str=String.valueOf(ringer_mode);
//AM.setRingerMode(1);
ringer_mode =AM.getRingerMode();
// AM_str=String.valueOf(ringer_mode);
// Log.w("Ringer_mode at ringing", AM_str);
// Log.w("MY_DEBUG_TAG", phonenumber);
if (phonenumber.equals("0046705888806")){
// Log.w("yahoo", "Number matched");
if (ringer_mode==AudioManager.RINGER_MODE_SILENT || ringer_mode==AudioManager.RINGER_MODE_VIBRATE){
AM.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
// Log.w("Phone number is matched .!", "Now , ringer mode is normal");
//int now_nor =AM.getRingerMode();
// String now_nor_str=String.valueOf(now_nor);
// Log.w("ring_mode at num matched",now_nor_str);
}
}
}
if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK) || state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
//int now_nor =AM.getRingerMode();
// String now_nor_str=String.valueOf(now_nor);
// Log.w("ring_mode at offHock",now_nor_str);
if (ringer_mode==AudioManager.RINGER_MODE_NORMAL){
AM.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
// Log.w("Normal", "");
}else if (ringer_mode==AudioManager.RINGER_MODE_SILENT){
AM.setRingerMode(AudioManager.RINGER_MODE_SILENT);
// Log.w("silent", "");
}else if (ringer_mode==AudioManager.RINGER_MODE_VIBRATE){
AM.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
// Log.w("vibrat", "");
}
// Log.w("Again", "Now the Ringer mode is get back ");
//int now =AM.getRingerMode();
// String now_str=String.valueOf(now);
// Log.w("ring_mode at end ",now_str);
}
}
} catch (Exception e) {
// TODO: handle exception
Log.w("MY_DEBUG_TAG", e);
}
}
}
그리고 발사 설정되어 활동이입니다 :
package com.example.callchecker;
import android.app.Activity;
//import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
//import android.util.Log;
import android.view.View;
import android.widget.Button;
//import android.content.BroadcastReceiver;
//import android.content.Intent;;
public class Mark_number extends Activity {
Context context = this ;
Button btn_dialog = (Button) findViewById(R.id.btn_dialog);
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.mark_number);
Log.w("start", "start");
btn_dialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.w("Mark_number", "click");
}
});
}
을 그리고 AndroidManifist.xml은 이것이다 :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.callchecker"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS">
</uses-permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.callchecker.Main_Activity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.example.callchecker.Mark_number"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="Main_Activity" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
</application>
</manifest>
Q 1). 내 응용 프로그램이 실행되고 있지 않은 날씨의 전화 번호를 받고 싶습니다. 이게 옳은 방법인가요 ???
2). 날씨 나는 Receiver를 등록하기 위해 Main_Activity를 호출해야합니까 ????
확인. 그러나 날씨 나는 앱 시작에 시작하는 활동에서 BroadcastReceiver를 확장하는 Main_activity를 호출해야합니까 ?? 또는 응용 프로그램이 실행될 때 자동으로 호출합니다. – natiq
활동을 호출 할 필요가 없습니다. 전화가 휴대 전화에 들어 오면 브로드 캐스트가 자동으로 실행되므로 브로드 캐스트에서 변경하십시오 –