2013-07-06 2 views
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를 호출해야합니까 ????

답변

1

모든 번호를 공유 환경 설정 또는 원하는 데이터베이스에 저장하십시오. 전화가 특정 번호에서 오는 경우 전화 상태를 변경하십시오.

+0

확인. 그러나 날씨 나는 앱 시작에 시작하는 활동에서 BroadcastReceiver를 확장하는 Main_activity를 호출해야합니까 ?? 또는 응용 프로그램이 실행될 때 자동으로 호출합니다. – natiq

+1

활동을 호출 할 필요가 없습니다. 전화가 휴대 전화에 들어 오면 브로드 캐스트가 자동으로 실행되므로 브로드 캐스트에서 변경하십시오 –

관련 문제