我有一个应用程序,我可以通过单击通知中的操作按钮来发送短信。我想在发送短信后显示 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, "短信已发送!", Toast.LENGTH_SHORT).show();
我尝试对此进行调试,但不幸的是 Eclipse 没有向我显示 onReceive()
中的变量内容。
我还阅读了有关通知 Google 开发者网站的“处理兼容性”的内容 here但我找不到对此进行更详细解释的教程。
编辑:
我想解释一下通过所有类传递什么 Context 可能会有所帮助:
- 在我的
MainActivity
中,我显示一个PreferenceFragment
作为主要内容 - 在那个
PreferenceFragment
中,我调用了新的MyAsyncTask(getActivity()).execute();
这样我的MainActivity
应该是我的上下文
- 在
MyAsyncTask
的构造函数中,我将其传递给创建Notification
的类,并将其保存为成员 (mContext
) - 其余的我已经提到了...
编辑 2:
这是我的 BroadcastReceiver
的相关代码 fragment ,用于监听 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();
}
}
最佳答案
使用可运行的。每当我在线程中执行命令时,我都会设置一个处理程序和一个可运行对象,以便在一切完成后让我在主线程中运行:
// Declare a global handler for the class
final Handler mHandler = new Handler();
// Declare a runnable that will do things app-side when your thread is finished
final Runnable mMessageSent= new Runnable()
{
@Override
public void run()
{
Toast.makeText(_context, "SMS sent!", Toast.LENGTH_SHORT).show();
}
};
// Set up your thread to post the runnable when it's finished sending an SMS
private void sendMessage()
{
Thread t = new Thread()
{
public void run()
{
// Send your SMS here
// When finished, notify the handler so it knows to show a toast notification
mHandler.post(mMessageSent);
}
};
t.start();
}
关于android - 如何在 Android 中执行点击操作后从通知发送 Toast?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20499775/