あるプロセスから別のプロセスに文字列を取得できません。
私はすでにこの問題に Intent を使用していますが、私の問題は、その文字列を取得したいクラスが、Activity ではなく PhoneCallListener を拡張していることです。
私の問題をよりよく理解するために、コードは次のとおりです。
// this is the class from where i want to send a string
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();
}
}
// this is the class where i want to get the string
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 incomming=incomingNumber.toString();
if (incomingNumber.equalsIgnoreCase(incomming))
{
Log.v("incomming_call",incomming);
telephonyService.endCall();
sendSMS(incomming, "I am Busy!!call me latter");
}
} catch (Exception e) {
e.printStackTrace();
}
audioManager.setStreamMute(AudioManager.STREAM_RING, false);
break;
}
super.onCallStateChanged(state, incomingNumber);
}
private void sendSMS(String incomming, String string)
{
android.telephony.SmsManager sms=android.telephony.SmsManager.getDefault();
sms.sendTextMessage(incomming, null, string, null, null);
}
}