0

ひえ..

SIMが変更されたかどうかを検出するアプリを作成しています..? アプリのインストール時に、現在の SIM シリアル番号を共有設定に保存しています。起動時に、ブロードキャストレシーバーを登録しました。メソッドでは、onReceive()現在の SIM シリアル番号にアクセスし、インストール時に保存されているものと比較しています。以下は受信機のコードです。

    package com.secuirity.sms;

    import org.apache.harmony.xnet.provider.jsse.GMailSender;

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.AsyncTask;
    import android.telephony.SmsManager;
    import android.telephony.TelephonyManager;
    import android.util.Log;

    public class BootUpReciever extends BroadcastReceiver{

    Context context;
    String email;
    String currentSimSerial;
    SharedPreferences settings;
    SmsManager smsMgr = SmsManager.getDefault();
    public static final String PREFS_NAME = "MyPrefsFile";

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

        settings = context.getSharedPreferences(PREFS_NAME, 0);
        String storedSimSerial = settings.getString("storedSimSerial", null);
        Log.d("Stored Sim Serial::",storedSimSerial);

        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        currentSimSerial = tm.getSimSerialNumber();
        Log.d("Current Sim Serial","::"+currentSimSerial);
        String trustedNum = settings.getString("cellno", null);
        email = settings.getString("email", null);

        if(currentSimSerial == storedSimSerial){

        }else{
            Log.d("Sim changed","!!!");
            new GmailAsync().execute("");
            String sms = "Sim card has changed, " +
                    "Sim Serial Number of this card is\n"+currentSimSerial+
                    "Network Operator"+tm.getNetworkOperatorName();
            smsMgr.sendTextMessage(trustedNum, null,sms, null, null);
        }

        Intent sms = new Intent(context, SMSReceiver.class);
        sms.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(sms);

        Intent netAvailability = new Intent(context, CheckingNetworkAvailability.class);
        netAvailability.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(netAvailability); 
    }
    public class GmailAsync extends AsyncTask<String, Void, String>{

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            String mail_body = "Sim serial number is "+currentSimSerial;
            String subject = "Your Sim has changed!!!";         
            GMailSender sender = new GMailSender("securemob.viasms@gmail.com", "smsfun890");
            try {
                sender.sendMail(subject,
                        mail_body+"\nThanks for using Mobile Security App",
                        "securemob.viasms@gmail.com",
                        email,null);
            } catch (Exception e) {
                Log.e("SendMail", e.getMessage(), e);
            }
            return null;
        }
        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            Log.d("Mail","Sent");
        }
    }
}

しかし、それは機能していません.... :(:(:(私は次の権限を持っています READ_PHONE_STATE" および "RECEIVE_BOOT_COMPLETED"

4

2 に答える 2

0

Hie Guys BOOT UPReceiverのソリューションを入手しました。Androidモバイルが起動すると、このイベントはすべてのアプリにブロードキャストされますが、内部メモリにインストールされているアプリは、SDカードに保存されているアプリと比較してすぐに応答します。したがって、解決策は

android:installLocation="internalOnly"

マニフェスト属性としてのマニフェストファイル。

于 2012-12-04T10:07:23.243 に答える
0

コードに問題は見当たりませんが、最初に確認することは、マニフェストに設定された SIM カードを読み取る権限があることです。

于 2012-12-03T12:25:46.053 に答える