Android 自动读取传入消息?

Android 自动读取传入消息?,android,Android,我正在使用广播接收器类自动读取消息 但是我面临一些问题 我正在使用缩进将数据传递给另一个活动,我不知道这是正确的方法吗?如果有更好的办法,请告诉我 我的应用程序会自动从邮件中读取OTP,但只要出现新邮件(如客户关怀邮件和任何邮件),它就会读取每条邮件。我只想在应用程序处于运行状态时读取邮件 这是我的密码 在我的舱单上 问题:1 我使用intent将数据传递给另一个活动,但不需要intent,是否还有其他将数据传递给另一个活动的方法 ANS:您可能需要考虑SyrdExcel对象。它

我正在使用广播接收器类自动读取消息

但是我面临一些问题

  • 我正在使用缩进将数据传递给另一个活动,我不知道这是正确的方法吗?如果有更好的办法,请告诉我
  • 我的应用程序会自动从邮件中读取OTP,但只要出现新邮件(如客户关怀邮件和任何邮件),它就会读取每条邮件。我只想在应用程序处于运行状态时读取邮件
这是我的密码

在我的舱单上


问题:1
我使用intent将数据传递给另一个活动,但不需要intent,是否还有其他将数据传递给另一个活动的方法

ANS:您可能需要考虑SyrdExcel对象。它有一个 简单的API,可跨应用程序的活动访问。在这里 这就是一个例子-

请参阅此处的官方文件-

问题2:我的应用程序在应用程序关闭时自动读取消息?我只想阅读消息应用程序正在运行时间

回答:您可以通过
ActivityManager
检查应用程序状态。请参阅 下面的方法

publicstaticbooleaninsapprunning(上下文)
{
ActivityManager ActivityManager=(ActivityManager)context.getSystemService(ACTIVITY_服务);
List runningAppProcessInfos=activityManager.getRunningAppProcesss();
对于(ActivityManager.RunningAppProcessInfo processInfo:runningAppProcessInfos){
if(processInfo.importance==ActivityManager.RunningAppProcessInfo.importance\u前台){
for(字符串activeProcess:processInfo.pkgList)
{
Log.i(“GCM”,activeProcess+:“+processInfo.importance);
if(activeProcess.equals(context.getPackageName())){
返回true;
}
}
}
}
返回false;
}
  • 缩进是通过活动进行数据通信的好方法

  • 即使应用程序已关闭,也可以接收短信


您可以检查应用程序是否处于Foreground模式。参考
public class IncomingSms extends BroadcastReceiver {

final SmsManager sms = SmsManager.getDefault();
String message;

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

    final Bundle bundle = intent.getExtras();

    try {

        if (bundle != null) {

            final Object[] pdusObj = (Object[]) bundle.get("pdus");

            for (int i = 0; i < pdusObj.length; i++) {

                SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                String phoneNumber = currentMessage.getDisplayOriginatingAddress();

                String senderNum = phoneNumber;
                message = currentMessage.getDisplayMessageBody();

                Intent a = new Intent(context, OtpConformation.class);
                a.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                a.putExtra("KEY_1", message);
                context.startActivity(a);

            }
        }

    } catch (Exception e) {
        Log.e("SmsReceiver", "Exception smsReceiver" +e);

    }
}
    Intent intent = getIntent();
    message = intent.getStringExtra("KEY_1");
    OtpEdt = (EditText)findViewById(R.id.Otp_editText);
    OtpEdt.setText(message);`
<receiver android:name=".IncomingSms"
        android:permission="android.permission.BROADCAST_SMS">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>
public static boolean isAppRunning(Context context)
    {
        ActivityManager activityManager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfos = activityManager.getRunningAppProcesses();


        for (ActivityManager.RunningAppProcessInfo processInfo : runningAppProcessInfos) {

            if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                for (String activeProcess : processInfo.pkgList)
                {
                    Log.i("GCM", activeProcess + ":" + processInfo.importance);

                    if (activeProcess.equals(context.getPackageName())) {
                        return true;
                    }
                }
            }
        }
        return false;
    }