我希望我的应用程序收到一条短信以启动 MainAcitivity。即使应用程序关闭
I want my app to receive an sms to start the MainAcitivity. Even when the app is closed
我开发了一个应用程序,它可以接收特定的短信,然后执行预定义的任务。此应用程序在 运行 时运行良好。但是当它关闭时,它不会执行预定义的任务。我相信我的应用程序在关闭时无法接收广播是有问题的。也许我没有在清单文件中正确注册接收器。
我有两个 classes。一个是扩展广播接收器的 SMSReceiver。第二个是 MainActivity 调用广播接收器接收文本消息并执行特定任务。
我的清单文件是:
<receiver android:name=".SMSReceiver" android:exported="true"
android:enabled="true" android:directBootAware="true">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<activity
android:name=".MainActivity">
</activity>
SMSReceiver Class 代码:
public class SMSReceiver extends BroadcastReceiver {
public String number;
public String nn;
public String v;
@Override
public void onReceive(Context context, Intent intent) {
}
}
MainActivityclass代码
public class MainActivity extends AppCompatActivity{
public String r_num;
Button btn;
EditText msg;
EditText num;
IntentFilter intentFilter;
private BroadcastReceiver intentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//MYCODE
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("SMS_RECEIVED_ACTION");
btn = (Button) this.findViewById(R.id.sendbtn);
msg = (EditText) this.findViewById(R.id.message);
num = (EditText) this.findViewById(R.id.numbertxt);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
}} });
}
private void sendMsg(String n, String m) {
}
protected void onResume()
{
registerReceiver(intentReceiver,intentFilter);
super.onResume();
}
protected void onPause()
{
unregisterReceiver(intentReceiver);
super.onPause();
}}
当我的应用程序是 运行 时,这段代码工作正常。我希望我的应用程序即使在 closed/not 运行 时也能响应消息。提前致谢
从 MainActivity 中删除广播接收器。在 SMSReceiver 的 onReceive()
中开始 MainActivity
而不是发送广播。将额外数据放入 Intent 并在 MainActivity 的 onNewIntent()
.
中接收它
Intent intent = Intent(context, MainActivity.java)
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
context.startActivity(intent)
在 MainActivity
中覆盖 onNewIntent()
。将MainActivity中广播接收者的代码放入onNewIntent()
或者将此代码放在 SMSReceiver 中而不是发送广播。
if(v.equalsIgnoreCase("call.me")) {
Toast.makeText(context, "Generating Call, Please Wait", Toast.LENGTH_LONG).show();
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse(number));
context.startActivity(callIntent);
}
像这样从 SMSReceiver 向 Intent 添加额外内容
intent.putExtra("message", str);
intent.putExtra("me", v);
intent.putExtra("num", number);
像这样从onNewIntent()
收到它
Bundle bundle = intent.getExtras();
String message = bundle.getString("message");
String me = bundle.getString("me");
String number = bundle.getString("num");
我开发了一个应用程序,它可以接收特定的短信,然后执行预定义的任务。此应用程序在 运行 时运行良好。但是当它关闭时,它不会执行预定义的任务。我相信我的应用程序在关闭时无法接收广播是有问题的。也许我没有在清单文件中正确注册接收器。 我有两个 classes。一个是扩展广播接收器的 SMSReceiver。第二个是 MainActivity 调用广播接收器接收文本消息并执行特定任务。
我的清单文件是:
<receiver android:name=".SMSReceiver" android:exported="true"
android:enabled="true" android:directBootAware="true">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<activity
android:name=".MainActivity">
</activity>
SMSReceiver Class 代码:
public class SMSReceiver extends BroadcastReceiver {
public String number;
public String nn;
public String v;
@Override
public void onReceive(Context context, Intent intent) {
}
}
MainActivityclass代码
public class MainActivity extends AppCompatActivity{
public String r_num;
Button btn;
EditText msg;
EditText num;
IntentFilter intentFilter;
private BroadcastReceiver intentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//MYCODE
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("SMS_RECEIVED_ACTION");
btn = (Button) this.findViewById(R.id.sendbtn);
msg = (EditText) this.findViewById(R.id.message);
num = (EditText) this.findViewById(R.id.numbertxt);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
}} });
}
private void sendMsg(String n, String m) {
}
protected void onResume()
{
registerReceiver(intentReceiver,intentFilter);
super.onResume();
}
protected void onPause()
{
unregisterReceiver(intentReceiver);
super.onPause();
}}
当我的应用程序是 运行 时,这段代码工作正常。我希望我的应用程序即使在 closed/not 运行 时也能响应消息。提前致谢
从 MainActivity 中删除广播接收器。在 SMSReceiver 的 onReceive()
中开始 MainActivity
而不是发送广播。将额外数据放入 Intent 并在 MainActivity 的 onNewIntent()
.
Intent intent = Intent(context, MainActivity.java)
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
context.startActivity(intent)
在 MainActivity
中覆盖 onNewIntent()
。将MainActivity中广播接收者的代码放入onNewIntent()
或者将此代码放在 SMSReceiver 中而不是发送广播。
if(v.equalsIgnoreCase("call.me")) {
Toast.makeText(context, "Generating Call, Please Wait", Toast.LENGTH_LONG).show();
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse(number));
context.startActivity(callIntent);
}
像这样从 SMSReceiver 向 Intent 添加额外内容
intent.putExtra("message", str);
intent.putExtra("me", v);
intent.putExtra("num", number);
像这样从onNewIntent()
收到它
Bundle bundle = intent.getExtras();
String message = bundle.getString("message");
String me = bundle.getString("me");
String number = bundle.getString("num");