0

強制停止された場合、SMS の受信時にアプリを再起動しようとしています。これは私のコードです。アプリを再起動していません。レシーバーを別のクラスとして作成してみてください。マニフェストで:

   <uses-permission android:name="android.permission.SEND_SMS" />
   <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <receiver android:name=".MySMSbr"> 
     <intent-filter> 
        <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 

 My mainActivity onCreate() :

   private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
BroadcastReceiver SMSbr;

  public void onCreate(Bundle savedInstanceState) {
    Toast.makeText(getApplicationContext(),"in OnCreate", Toast.LENGTH_LONG).show();
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);      
     SMSbr = new BroadcastReceiver() 
        {

          @Override
          public void onReceive(Context context,Intent intent) 
          {
              this.abortBroadcast();
              Toast.makeText(context, "in onReceive", Toast.LENGTH_LONG).show();
              toggleLogging(AppSettings.getServiceRunning(MainActivity.this),
                        AppSettings.getLoggingInterval(MainActivity.this));
              this.clearAbortBroadcast();
            }//end of onReceive method

          };//end of BroadcastReceiver

          IntentFilter SMSfilter = new IntentFilter(SMS_RECEIVED);
          this.registerReceiver(SMSbr, SMSfilter);
  }
    in togglelogging the service is started
    where is it going wrong.
4

1 に答える 1

0

マニフェストでa を宣言してBroadcastReceiverいます-つまり、静的レシーバーですが、実際にはそのようなクラスはなく、アクティビティで動的レシーバーを作成しています。

実際に行っているのは、アクティビティの開始時にレシーバーを登録することですが、逆の方法が必要です (レシーバーがブロードキャストを受信したら、アクティビティ/アプリを開始します)。
呼び出されるクラスを作成する必要がありSMSbr extends BroadcastReceiver、そこでロジックを実行できます。

そうすれば、受信者が常に登録され、SMS ブロードキャストが受信されるとアプリが起動します。

于 2013-04-08T12:15:14.860 に答える