【问题标题】:accessing values of variables in broadcast receiver which are defined in main activity(on incoming call)访问在主要活动中定义的广播接收器中的变量值(在来电时)
【发布时间】:2015-06-20 15:47:38
【问题描述】:

我正在尝试制作一个 android 应用程序,它将向来电发送短信(短信内容将由用户指定)。我正在使用广播接收器,我想在其中使用主要活动中的编辑文本(短信内容)的值(来电到达时)。我尝试了 Intent 但我没有得到解决方案。请帮忙。

主要活动:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

   et1=(EditText)findViewById(R.id.editText1);
   btn=(Button)findViewById(R.id.button1); 
}
 public void clicksave(View shilpa)
 {
s1=et1.getText().toString();
}

广播接收器:

public class MyCallReceiver extends BroadcastReceiver
{
static String incomingNumber="";
Context ct;

public void onReceive(Context context, Intent intent)
{
    if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING))
    {
        incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

                        try 
                        {
                            SmsManager smsmanager=SmsManager.getDefault();  
                            smsmanager.sendTextMessage(incomingNumber, null,"######",null,null);
                            Toast.makeText(context, "Message sent succesfully",Toast.LENGTH_SHORT).show();
                        }
                        catch (Exception e) 
                        {
                            Toast.makeText(context, "SMS failed", Toast.LENGTH_LONG).show();
                            e.printStackTrace();
                        }
      }

  } 
}

【问题讨论】:

  • 您可以发布一些代码以便我们查看您的尝试吗?
  • 请发布您的代码
  • 清楚你的代码..
  • 好吧,当用户接听电话时,您的活动不存在,您将如何处理?将消息保存在首选项中,并在来电时阅读
  • 你能发布一下语法吗?

标签: android


【解决方案1】:

是什么让你认为当用户接到电话时 Activity 会处于活动状态?

最好的方法是将值保存在应用程序的 Preferences 中,并在调用时读取该值

final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
final String message = preferences.getString("message");

然后使用message 变量。

smsmanager.sendTextMessage(incomingNumber, null, message, null,null);

在您的主要活动中,将 EditText 中写入的值保存在首选项中使用

final SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit();
editor.putString("message", message);
editor.commit();

你应该没事。如果您在线搜索,可以通过保存对 Activity 的引用来与 Activity 通信,但我认为这对您的代码没有帮助(而且我不喜欢这种方法)

【讨论】:

  • 当我在按钮单击时编写此代码时,在按钮单击事件时强制关闭
  • 最终 SharedPreferences.Editor 编辑器 = PreferenceManager.getDefaultSharedPreferences(context).edit(); editor.putString("消息", 消息); editor.commit();
【解决方案2】:

我终于找到了解决办法

在主要活动中:

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE); 
Editor editor = pref.edit();
 editor.putString("message", message);
editor.commit();

在广播接收器中:

SharedPreferences pref = context.getSharedPreferences("MyPref", context.MODE_PRIVATE); 
    String a=pref.getString("message", null);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多