안녕하세요 안드로이드를 공부한지 얼마 되지 않은 야마돌기입니다 ㅠ

 

제가 이번에 간단한 어플리케이션을 하나 만들고 있는데요

 

공부 할겸 해서 이미 있는 어플리케이션이지만, 센서값으로 전화를 받아지게 하고 싶습니다 ㅠ

 

이미 오픈된 소스를 보며 공부도 하였는데 이해가 가지 않는 부분도 많고

 

또 제가 원하는방향으로 코딩이 잘 되지 않네요 ㅠㅠ

 

제가 알고싶은 것은.. 원하는 경우 (액티비티에서의 버튼클릭) 에서 부터 폰스테이트를 받을수 있냐는 것 입니다.

 

시작 버튼을 누르게 되면, 어플이 종료되는 동시에 브로드캐스트가 그 시점부터 폰스테이트를 받는 거죠.

 

그리고 다시 어플리케이션에 들어가서 종료버튼을 누르면 브로드캐스트가 수신을 종료하게 되는 것 입니다 ㅠ

 

제가 나름대로 몇일동안을 생각했는데 도저히 모르겠더라구요.. 그러다가 결국에 평소 도움을 많이얻던 여기에 질문하게 되었네요 ㅠㅠ

 

 

 

 

 

AnswerReceiver.java 입니다. (브로드캐스트리시버)

 

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

      //sellect 클래스에서 인텐트필터를 정의 하였습니다.
      if (intent.getAction().equals("CALL_STATE_RINGING")) {

       Intent start_intent = new Intent(context,Catchcall.class);
       start_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

       //▲이 부분은 정확히 모르겠으나, 넣으라고 해서 넣었습니다.
       context.startService(start_intent);

       // 전화를 받는 서비스를 시작합니다.
      }

}

-------------------------------------------------------------------------------------------------------------

 

Sellect.java 입니다. (버튼이 구성되어있는 class)

 

//메인 액티비티에서 5초간 화면을 노출한 후 바로 sellect로 넘어오도록 코딩 하였습니다.

public class Sellect extends Activity {
 

 private MRNotifier mNotifier;
 
 AnswerReceiver r = new AnswerReceiver();
 IntentFilter filler = new IntentFilter("android.intent.action.PHONE_STATE");
   
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.sellect);

 

  //이미지 버튼의 투명도를 조정.
  ImageButton _set = (ImageButton)findViewById(R.id.set);
       

        Drawable alpha1 = _set.getBackground();
        alpha1.setAlpha(20);        
       
        ImageButton _cancle = (ImageButton)findViewById(R.id.cancle);
        Drawable alpha2 = _cancle.getBackground();
        alpha2.setAlpha(20);
       
        mNotifier = new MRNotifier(this);
        //상단 바의 아이콘을 위해 만들었습니다.
 }

 

    public void setOnclick(View v){
     
         mNotifier.mstart = true;
         mNotifier.updateNotification();

        //상단바의 아이콘 생성부분.
         
         registerReceiver(r, filler); 

         //리시버에 받아야 할 값을 지정.            

         finish();
    }
    
    public void cancleOnclick(View v){

      mNotifier.mstart = false;
      mNotifier.DestroydNotification();

     //상단바의 아이콘 지움.
      
      unregisterReceiver(r);

      //리시버 종료. 하지만 종료키를 누르면 이상종료됩니다.

     finish();
     //stopHelloService();
    }

----------------------------------------------------------------------------------------------------------------------------------

코딩으로 인텐트필터값을 주었기 때문에 매니페스트 내에서는 별다른것 없이 하였습니다.

 

Manifast.xml

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.sippda.cMR"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name="com.sippda.cMR.AcMagicRActivity"
                  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="com.sippda.cMR.AnswerReceiver">

       //코딩으로 처리하면서, 이 부분에서 enable 이랑 인텐트 필터를 지웠습니다.
        </receiver>

                <activity android:name="Sellect"></activity>
       
        <service android:name="com.sippda.cMR.Catchcall"></service>
    </application>
   
   <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
   <uses-permission android:name="android.permission.READ_PHONE_STATE" />
   <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
   <uses-permission android:name="android.permission.READ_CONTACTS" />


</manifest>

 

---------------------------------------------------------------------------------------------------------------------------------

 

 

그리고 브로드캐스트 리시버에서 콜 을 받으면 서비스를 시작하게 되도록 코딩 하였는데

서비스 종료는 어떻게 코딩해야 할지 감이 잡히지 않습니다 ㅠ

버튼에서 service.onDestroy(); 이런식으로 종료해야할지

브로드캐스트에서 else 값을 넣어야 할지.. else 값을 넣는다면 어떤식으로 넣어야 할지를 모르겠습니다.

 

정말 간절합니다.. 대충해보고 하는 질문이 아니라 6일정도는 책보고 구글링해봤습니다 ㅠㅠ 온종일 이생각만 나네요

어디 물어볼사람도 없고 ... 답변해주시면 정말 감사하겠습니다 ㅠㅠ