0

アクティビティクラスからPhoneStateListenerクラスにデータを取得できないという問題があります。

コードをよりよく理解するために、以下のとおりです。

これは、データまたは文字列を送信する場所からのクラスです

package net.cellobject.blockingincomingcall;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class SecondTab extends Activity
{
    EditText e1;
    Button b1;

    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.setting);

        e1=(EditText)findViewById(R.id.edt1);

        b1=(Button)findViewById(R.id.b1);

        LoadPreferences();

        b1.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v) 
            {
                String msg=e1.getText().toString();

                SavePreferences("msg1",msg);

                LoadPreferences();

                if(msg=="")
                {
                    Toast.makeText(getApplicationContext(), "First 


                                               Enter the message then save it"

                                               ,Toast.LENGTH_LONG).show();

                    e1.requestFocus();
                }
            }
        });
    }

    private void LoadPreferences() 
    {
        SharedPreferences shp= getPreferences(MODE_PRIVATE);

        String s1=shp.getString("msg1","");

        e1.setText(s1);
    }

    private void SavePreferences(String key, String msg) 
    {
        SharedPreferences shp= getPreferences(MODE_PRIVATE);

        SharedPreferences.Editor editor=shp.edit();

        editor.putString(key, msg);

        editor.commit();
    }
}

これは、PhoneStateListenerで拡張されたデータまたは文字列を取得したいクラスです。

package net.cellobject.blockingincomingcall;

import java.lang.reflect.Method;
import android.content.Context;
import android.media.AudioManager;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import com.android.internal.telephony.ITelephony;


public class PhoneCallStateListener extends PhoneStateListener 
{   
    private Context context;    

    public PhoneCallStateListener(Context context)
    {
        this.context = context;
    }

    public void onCallStateChanged(int state, String incomingNumber) 
    {
        switch (state) 
        {
            case TelephonyManager.CALL_STATE_RINGING:               

                AudioManager audioManager = (AudioManager) context.

                                                 getSystemService(Context.AUDIO_SERVICE);   

                //Turn ON the mute

                audioManager.setStreamMute(AudioManager.STREAM_RING, true);     



                TelephonyManager telephonyManager = (TelephonyManager) context.

                                               getSystemService(Context.TELEPHONY_SERVICE);

                try {
                    @SuppressWarnings("rawtypes")

                    Class clazz = Class.forName(telephonyManager.getClass().getName());

                    Method method = clazz.getDeclaredMethod("getITelephony");

                    method.setAccessible(true);

                    ITelephony telephonyService = (ITelephony) method.invoke(telephonyManager);     

                    //Checking incoming call number

                    String incoming=incomingNumber.toString();

                    if (incomingNumber.equalsIgnoreCase(incoming)) 
                    {
                        Log.v("incoming_call",incoming);

                        telephonyService.endCall();

                        sendSMS(incoming, "I am Busy!!call me later");
                    }

                } catch (Exception e) {

                    e.printStackTrace();
                }

            audioManager.setStreamMute(AudioManager.STREAM_RING, false);

            break;
        }

        super.onCallStateChanged(state, incomingNumber);
    }

    private void sendSMS(String incoming, String string) 
    {
        android.telephony.SmsManager sms=android.telephony.SmsManager.getDefault();

        sms.sendTextMessage(incoming, null, string, null, null);
    }
}
4

2 に答える 2

0

設定を保存して取得するための非常に簡単な方法を投稿しています。これを使用して、設定の保存と取得に関連する問題を解決します。

public class Preferences {


public static void record(String key,Context context,String value)
{
    SharedPreferences pref=PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences .Editor editor=pref.edit();

    editor.putString(key,value );
    editor.commit();


}
public static String getRecord(String key,Context context)
{
    return PreferenceManager.getDefaultSharedPreferences(context).getString(key,PREF_DEFAULT_VALUE);

}

}

于 2012-04-13T13:21:29.973 に答える
0

Context両方にあるので、両方の場所でデータを設定および取得するためにActivity and Receiver使用できますSharedPreference..何が問題なのか..

context.getSharedPreference("name" , MODE_PRIVATE);
于 2012-04-13T13:09:50.353 に答える