android - 阻止 Intent 打开我的应用程序

标签 android android-intent

我正在创建一个 Android 应用程序,它将接收所有 SMS,进行一些处理并将其存储在数据库中,稍后可以从我的应用程序中查看该数据库。

我在我的 SMS 接收器类中使用 Intent。主 Activity 将获取此 Intent 并将其保存到数据库中。我的代码工作正常并且可以完成我需要的所有事情,但我唯一的问题是每次我收到短信时,我的应用程序都会启动。

我的预期行为是,当用户收到短信时,详细信息(姓名、消息和日期)应该在后台添加到数据库中,而无需打开我的应用程序。是否有任何属性可以用于抑制启动我的应用程序,或者我应该删除 Intent 并使用其他替代方法?

这是我的代码。

My SMS Receiver Class

public class SMSReceiver extends BroadcastReceiver 
{

@Override
public void onReceive(Context context, Intent intent)
{

    Bundle bundle = intent.getExtras();
    Object[] pdus = (Object[]) bundle.get("pdus");
    SmsMessage[] messages = new SmsMessage[pdus.length];
    for (int i = 0; i < messages.length; i++)
    {
        messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
        String address = messages[i].getOriginatingAddress();
        String message = messages[i].getDisplayMessageBody().toString();
        long time = messages[i].getTimestampMillis();


        String dateFromSms = formatter.format(calendar.getTime());

        Intent newintent = new Intent(context, MainActivity.class);
        newintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        newintent.putExtra("address", address);
        newintent.putExtra("message",
                m.group(1));
        newintent.putExtra("date",
                time.toString());
        context.startActivity(newintent);

    }
}
}


My MainActivity Class

public class MainActivity extends Activity
{
public void onCreate(final Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.content_main);
    TransactionDataBase DB = new TransactionDataBase(this,2);
    Bundle extras = getIntent().getExtras();
    if (extras != null) 
    {
        String address = extras.getString("address");
        String message = extras.getString("message");
        String date = extras.getString("date");

        DB.addMessage(address, message, date);
    }
    }
}

最佳答案

my only problem is that every time, I receive a SMS, my Application gets launched

不,你的 MainActivity 启动了,因为你在 Intent 上调用 startActivity() 指向 MainActivity,每次您收到一条短信。

更糟糕的是,在该 Activity 中,您正在主应用程序线程上执行数据库 I/O。

Are there any attributes that I can use with the intent to suppress launching my application

您应该删除所有这些代码。

use some other alternative approach?

让数据库 I/O 由 IntentService 而不是 Activity 执行。

关于android - 阻止 Intent 打开我的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35253508/

相关文章:

android - Android:高效的声音播放方式

android - 以编程方式解锁屏幕

android - 如何在用户离开当前 Activity 时执行一些代码(按下硬件按钮)

android - 如何在整个应用程序中使用相同的 XMPP 连接

java - 使用 Volley Java/Android 进行 HTTP 请求

android - 从地点名称获取对该地点的描述

java - 如何每秒启动 ACTION TIME_TICK Intent ?

android - 针对特定文件和 URL 扩展打开我的应用程序 - intent-filter 未按预期工作

android - 在图像之间滑动android

android - 使用 View Pager 进行循环滚动