【发布时间】:2013-12-28 06:47:40
【问题描述】:
我有一个应用程序,通过单击通知中的操作按钮来发送 SMS。我想在发送 SMS 后显示 Toast,但这不起作用。恐怕它与 AsyncTask 和/或 BroadcastReceiver 有关。
发送 SMS 的工作流程如下所示:
- 我在
AsyncTask中扫描我的设备联系人并从AsyncTask的onPostExecute()创建Notification - 我使用
NotificationCompat.Builder创建Notification -
我将
PendingIntent添加到Notification,如下所示:PendingIntent.getBroadcast(mContext, (int) _person.getId(), i, PendingIntent.FLAG_ONE_SHOT); 我从
BroadcastReceiver的onReceive()发送短信-
我尝试像这样从那里发送 Toast:
Toast.makeText(_context, "SMS sent!", Toast.LENGTH_SHORT).show();
我尝试对此进行调试,但不幸的是 Eclipse 没有向我显示 onReceive() 中的变量内容。
我还阅读了有关 Google 开发者网站 here 通知的“处理兼容性”的内容,但我找不到更详细解释的教程。
编辑:
我想解释一下通过所有类传递了什么 Context 可能会有所帮助:
- 在我的
MainActivity中,我将PreferenceFragment显示为主要内容 - 在那个
PreferenceFragment中,我调用了新的MyAsyncTask(getActivity()).execute();,所以我的MainActivity应该是我的Context - 在
MyAsyncTask的构造函数中,我将其传递给创建Notification的类并将其保存为成员(mContext) - 我已经提到的其余部分...
编辑 2:
这是我的BroadcastReceiver 的相关代码,用于监听Notification 的操作:
@Override
public void onReceive(Context _context, Intent _intent)
{
String type = _intent.getStringExtra("type");
if (type.equals("SMS"))
{
String phoneNumber = _intent.getStringExtra("phoneNumber");
String message = _context.getResources().getString(
R.string.smstext);
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, message, null, null);
Toast.makeText(_context, "SMS sent!", Toast.LENGTH_SHORT).show();
}
}
【问题讨论】:
-
有错误信息吗?如果有请张贴。 _context 是什么,它在哪里设置?
-
请详细说明“这不起作用”
-
好的,SMS 已发送,但 Toast 未显示。 _context 只是从 onReceive(Context _context, Intent _intent) 传递过来的 Context。 (我对传递的变量使用下划线)我没有收到错误消息。
-
一次使用“mContext”和一次“_context”是否正常?这些都一样吗。您可能将错误的上下文传递给您的 toast
-
mContext 是我在创建通知的类中使用的成员变量。最好添加一些关于上下文来自何处的解释。
标签: android android-asynctask android-notifications toast android-context