2014-12-05 97 views
0

我正在尋找一個應用程序,截取短信給予某些參數。截至目前,我有一個註冊的切換按鈕以及SMSReceiver類正在工作,但我無法找到一種方法,只有在啓用切換功能時SMSReceiver才能工作,並且禁用切換功能時SMSReceiver停止工作。如何從撥動按鈕撥打電話SMSReceiver類

Main.Java

公共類主要擴展活動{

Intent in = new Intent(); 
IntentFilter intentFilter; 
String drivingMessage; 
String originAddress; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    intentFilter = new IntentFilter(); 
    intentFilter.addAction("SMS_RECEIVED_ACTION"); 

} 

BroadcastReceiver intentReceiver = new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context context, Intent intent){ 
     originAddress = intent.getExtras().getString("sms"); 
     Toast.makeText(context, originAddress, Toast.LENGTH_LONG).show(); 
    } 
}; 

@Override 
protected void onResume(){ 
    registerReceiver(intentReceiver, intentFilter); 
    super.onResume(); 
} 

@Override 
protected void onPause(){ 
    unregisterReceiver(intentReceiver); 
    super.onPause(); 
} 


public void serviceEnabled(View view){ 
    ToggleButton tB = (ToggleButton) findViewById(R.id.serviceToggle); 


    boolean on = tB.isChecked(); 

    if(on){ 
     Toast.makeText(this, " toggle is on ", Toast.LENGTH_SHORT).show(); 




    } else{ 
     Toast.makeText(this, " toggle is off " , Toast.LENGTH_SHORT).show(); 
    } 




} 

}

SMSReceiver.Java

public class SMSReceiver extends BroadcastReceiver { 

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

    Bundle bundle = intent.getExtras(); 
    SmsMessage[] msgs = null; 
    String str = "SMS From"; 
    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]); 

      if (i == 0){ 
       str += msgs[i].getOriginatingAddress(); 

      } 

     } 

     Intent broadcastIntent = new Intent(); 
     broadcastIntent.setAction("SMS_RECEIVED_ACTION"); 
     broadcastIntent.putExtra("sms", str); 
     context.sendBroadcast(broadcastIntent); 


     this.abortBroadcast(); 
    } 

} 

任何幫助是極大的讚賞,因爲這是一個項目一類。先謝謝你!

回答

1

的其他部分,因爲您的切換按鈕是用戶首選項/設置,您可以將狀態保存爲SharedPreferences中的布爾標誌。
然後在您的SMSReceiver中,在處理傳入消息之前,您可以檢查SharedPreferences中的狀態標誌並相應地執行。

public void serviceEnabled(View view){ 

ToggleButton tB = (ToggleButton) findViewById(R.id.serviceToggle); 


boolean on = tB.isChecked(); 
SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(this); 
Editor editor=preferences.edit(); 
editor.putBoolean("is_sms_on", on); 
editor.commit(); 

if(on){ 
    Toast.makeText(this, " toggle is on ", Toast.LENGTH_SHORT).show(); 




} else{ 
    Toast.makeText(this, " toggle is off " , Toast.LENGTH_SHORT).show(); 
} 




} 

SMSReceiver.Java

public class SMSReceiver extends BroadcastReceiver { 

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

SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(context) 
boolean isServiceOn=preferences.getBoolean("is_sms_on",true); 
if(isServiceOn){ 
Bundle bundle = intent.getExtras(); 
SmsMessage[] msgs = null; 
String str = "SMS From"; 
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]); 

     if (i == 0){ 
      str += msgs[i].getOriginatingAddress(); 

     } 

    } 

    Intent broadcastIntent = new Intent(); 
    broadcastIntent.setAction("SMS_RECEIVED_ACTION"); 
    broadcastIntent.putExtra("sms", str); 
    context.sendBroadcast(broadcastIntent); 


    this.abortBroadcast(); 
} 
} 

} 
+0

這個作品我離開了我的else語句中的註銷行。謝謝,你真的救了我和我的項目哈哈! – 2014-12-05 05:14:15

0

嘗試取消註冊接收器時,切換按鈕未選中。

public void serviceEnabled(View view){ 
    ToggleButton tB = (ToggleButton) findViewById(R.id.serviceToggle); 


    boolean on = tB.isChecked(); 

    if(on){ 
     //your code 

    } else{ 
     unregisterReceiver(intentReceiver); 
    } 




} 
+0

我試圖用的onReceive方法進入切換沿插入廣播接收器類是ON部分和未註冊它在關閉部分但沒有IA在所有發生的事情。不知道這是爲什麼。 – 2014-12-05 02:13:33

0

嘗試直接從清單中禁止接收器時,切換按鈕沒有被選中這樣的接收器是不是在畫面的all.Use這在服務功能啓用

PackageManager pm=getPackageManager(); 
ComponentName componentName=new ComponentName(getApplicationContext(),yourreceiver.class);//where yourreceiver is the name of your receiver class 
     pm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,PackageManager.DONT_KILL_APP); 
+0

謝謝,我會試試這個。 – 2014-12-05 04:34:53