Android 使用服务的传入文本消息的通知

Android 使用服务的传入文本消息的通知,android,service,notifications,Android,Service,Notifications,几天来我的问题一直困扰着我。实际上,我想做的是创建一个通知服务,即使用户不在应用程序中,也可以向用户提供警报。该服务应每5分钟检查一次传入消息。通知应该与通知抽屉中的通知收件箱样式完全相同。我需要通过单击通知调用特定活动。有人能建议我怎么做吗?感谢您的帮助……首先,您需要获得接收和阅读短信的权限。您可以在androidManifest.xml中使用以下代码执行此操作:- <manifest xmlns:android="http://schemas.android.com/apk/

几天来我的问题一直困扰着我。实际上,我想做的是创建一个通知服务,即使用户不在应用程序中,也可以向用户提供警报。该服务应每5分钟检查一次传入消息。通知应该与通知抽屉中的通知收件箱样式完全相同。我需要通过单击通知调用特定活动。有人能建议我怎么做吗?感谢您的帮助……

首先,您需要获得接收和阅读短信的权限。您可以在
androidManifest.xml
中使用以下代码执行此操作:-

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.sms"
  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />

<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS"></uses-permission>

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <receiver android:name=".SMSBroadcastReceiver">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>

</application></manifest>

然后,您需要设置您的广播接收器以接收传入SMS的通知

public class SMSBroadcastReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();
    SmsMessage[] msgs = null;
    String str = "no message received";
    if(bundle != null){

        Object[] pdus = (Object[]) bundle.get("pdus");
        msgs = new SmsMessage[pdus.length];
        for(int i=0; i<msgs.length;i++){

            msgs[i]= SmsMessage.createFromPdu((byte[])pdus[i]);
            str += "SMS from Phone No: " +msgs[i].getOriginatingAddress();
            str +="\n"+"Message is: ";
            str += msgs[i].getMessageBody().toString();
            str +="\n";
        }

        Log.v("Debug", str);
        Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
    }
}}
公共类SMSBroadcastReceiver扩展广播接收器{
@凌驾
公共void onReceive(上下文、意图){
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
String str=“未收到任何消息”;
if(bundle!=null){
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];

对于(int i=0;i您需要注册一个broadcastReceiver以侦听新消息,然后启动一个服务来执行您的操作。@Rohan Kandwal,该服务是否自动运行?我们如何注册到broadcastReceiver请提供一些代码。您无需每5分钟检查一次传入消息。我提供的代码将自动运行自动检测任何传入消息。现在,如果您想在收到的SMS上需要服务,则可以在
onReceive()中启动服务
@user3057567除了我不知道你到底想在你的服务中得到什么之外,我不会做你的家庭作业。当你在工作中遇到任何问题时,我也会帮助你。你自己试试,如果你遇到任何问题,我们会提供帮助。@user3057567和一些供参考的信息,如果你看到任何对你有帮助的答案,请投赞成票nd如果它解决了您的问题,那么请将答案标记为正确。快乐编码!!!@user3057567您的问题解决了吗?如果是,请将此问题标记为已解决。我也希望这样做,但我收到的消息不是SMS,而是通过MQTT代理(服务器)接收的CAP消息。您的解决方案是否适用于任何传入消息或仅适用于文本消息?谢谢