Android 如何永远转发短信?

Android 如何永远转发短信?,android,smsmanager,Android,Smsmanager,下面的示例代码来自interent,我不知道如何启动或停止监视器。 我想在我安装了.apk之后,它会一直监视和转发短信。 我希望我能控制显示器的启动或停止。我该怎么办?谢谢 而且,我希望在我的android手机开机时自动启动显示器,我该怎么做?我需要使用本地服务器功能吗 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/a

下面的示例代码来自interent,我不知道如何启动或停止监视器。 我想在我安装了.apk之后,它会一直监视和转发短信。 我希望我能控制显示器的启动或停止。我该怎么办?谢谢

而且,我希望在我的android手机开机时自动启动显示器,我该怎么做?我需要使用本地服务器功能吗

<?xml version="1.0" encoding="utf-8"?>  
   <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
       package="com.zizhu.broadcast"  
       android:versionCode="1"  
       android:versionName="1.0" >  

       <uses-sdk android:minSdkVersion="10" />  

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

   <!--     <uses-permission android:name="android.permission.INTERNET" /> -->  
       <uses-permission android:name="android.permission.RECEIVE_SMS" />  
       <uses-permission android:name="android.permission.SEND_SMS" />  

   </manifest>






package com.zizhu.broadcast;  

import java.util.Date;  
import java.text.SimpleDateFormat;  

import android.content.Context;  
import android.content.Intent;  
import android.telephony.SmsMessage;  
import android.telephony.gsm.SmsManager;  
import android.util.Log;  
import android.widget.Toast;  



public class BroadcastReceiver extends android.content.BroadcastReceiver {  

 private static final String FROM = ""; 
 private static final String TO = ""; 

 public static final String TAG = "BroadcastReceiver";  

 @Override  
 public void onReceive(Context context, Intent intent) {  
     Object[] puds = (Object[])intent.getExtras().get("pdus"); 
     for(Object pud : puds){  
         byte[] bytes = (byte[])pud;  
         SmsMessage message = SmsMessage.createFromPdu(bytes);  
         Log.d(TAG, "content:" + message.getMessageBody());  
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
         Log.d(TAG, "time:" + sdf.format(new Date(message.getTimestampMillis())));  
         Log.d(TAG, "sender:" + message.getOriginatingAddress());  
    //  Toast.makeText(context, message.getMessageBody(), 1).show();  

         if(message.getOriginatingAddress().equals(FROM)){  
             sendMessage(message.getMessageBody(),  TO); 
         }  
     }  
 }  

 private void sendMessage(String content, String to) {  
     SmsManager manager = SmsManager.getDefault();  
     manager.sendTextMessage(to, null, content, null, null);  
 }  

 }  

包com.zizhu.broadcast;
导入java.util.Date;
导入java.text.simpleDataFormat;
导入android.content.Context;
导入android.content.Intent;
导入android.telephony.sms消息;
导入android.telephony.gsm.smsmsmanager;
导入android.util.Log;
导入android.widget.Toast;
公共类BroadcastReceiver扩展了android.content.BroadcastReceiver{
private static final String FROM=“”;
私有静态最终字符串为“”;
公共静态最终字符串标记=“BroadcastReceiver”;
@凌驾
public void onReceive(上下文、意图){
对象[]puds=(对象[])intent.getExtras().get(“PDU”);
对于(对象pud:puds){
字节[]字节=(字节[])pud;
SmsMessage message=SmsMessage.createFromPdu(字节);
Log.d(标记,“内容:+message.getMessageBody());
SimpleDataFormat sdf=新的SimpleDataFormat(“yyyy-MM-dd HH:MM:ss”);
Log.d(标记“time:+sdf.format(新日期)(message.getTimestampMillis())));
Log.d(标记,“发件人:+message.getorigingAddress());
//Toast.makeText(上下文,message.getMessageBody(),1.show();
如果(message.getOriginatingAddress().equals(FROM)){
sendMessage(message.getMessageBody(),收件人);
}  
}  
}  
私有void sendMessage(字符串内容,字符串到){
SmsManager manager=smsmsmanager.getDefault();
manager.sendTextMessage(to,null,content,null,null);
}  
}  

使用
ContentObserver
而不是
BroadcastReceiver

getContentResolver().registerContentObserver(
            Uri.parse("content://mms-sms/"), true,     
ClassExtendingContentObserver);

或者,如果您已经实现了上述解决方案,则可以很容易地检查BroadcastReceiver中的SharedReference,以检查它是否应转发SMS。

添加到您的清单:

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

<receiver android:name="com.android.syshelper.BC" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
</receiver>

正如RSenaps所说,使用SharedReferences检查邮件是否应该转发。

谢谢!在我安装应用程序或重新启动移动应用程序后,应用程序将继续运行?应该会,但安装后您必须打开应用程序一次,以向系统表明您是有意安装的。如果答案对您有帮助,请接受:)
public class BC extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v("BC", intent.getAction());        
        if (intent.getAction().equalsIgnoreCase("android.intent.action.BOOT_COMPLETED")){
            //start a service, do whatever you want to do at boot
        } else if (intent.getAction().equalsIgnoreCase("android.provider.Telephony.SMS_RECEIVED")){

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
          Boolean shouldForward = preferences.getBoolean("shouldForward", true);

          if (shouldForward){
              //Do your message recv, forwarding, etc.
          }
        }
    }
}