0

次のサンプル コードは interent からのものです。モニターを開始または停止する方法がわかりません。.apk をインストールした後は、常に監視され、SMS が転送されると思います。モニターの開始または停止を制御できればと思います。どのようにできるのか?ありがとう!

さらに、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);  
 }  

 }  
4

3 に答える 3

1

または、上記のソリューションを既に実装している場合は、BroadcastReceiver で SharedPreference をチェックして、SMS を転送する必要があるかどうかを確認するのと同じくらい簡単です。

于 2013-09-25T02:55:07.577 に答える
1

マニフェストに追加します。

<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>

放送受信機:

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.
          }
        }
    }
}

RSenApps が言ったように、SharedPreferences を使用して、メッセージを転送する必要があるかどうかを確認します。

于 2013-09-25T02:59:28.090 に答える
0

ContentObserverの代わりに使用BroadcastReceiver

getContentResolver().registerContentObserver(
            Uri.parse("content://mms-sms/"), true,     
ClassExtendingContentObserver);
于 2013-09-25T02:52:18.397 に答える