android - 如何在 Android 中执行点击操作后从通知发送 Toast?

标签 android android-asynctask android-notifications toast android-context

我有一个应用程序,我可以通过单击通知中的操作按钮来发送短信。我想在发送短信后显示 Toast,但这不起作用。恐怕它与 AsyncTask 和/或 BroadcastReceiver 有关。

发送 SMS 的工作流程如下所示:

  • 我在 AsyncTask 中扫描我的设备联系人并从 AsyncTaskonPostExecute() 创建 Notification >
  • 我使用 NotificationCompat.Builder 创建 Notification
  • 我将 PendingIntent 添加到 Notification 中,如下所示:

    PendingIntent.getBroadcast(mContext, (int) _person.getId(), i, PendingIntent.FLAG_ONE_SHOT);

  • 我从 BroadcastReceiveronReceive()

  • 发送短信
  • 我尝试像这样从那里发送 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/

相关文章:

android - 从 Java 到 Kotlin 的代码转换后的异常 : java. lang.ClassCastException : java. lang.String cannot be cast to com.example.misc.Restaurant

android - 通过intent-Android传递int数组

java - android: ArrayAdapter 在 AsyncTask 中只执行一次

java - Android,我可以将 AsyncTask 放在单独的类中并进行回调吗?

php - AsyncTask Android 中的 Http 请求

android - Android 中的前台通知启动新 Activity(通过 pendingIntent)而不是现有 Activity

android - MP android 图表在水平条形图的 X 轴上显示浮点值?

android - fragment 中的 softInputMode

android - 如何在 Android Oreo 中显示媒体的彩色通知?

android - java.lang.NoSuchMethodError : android. 应用程序通知$Builder.addAction