android通知在重新启动后消失

android通知在重新启动后消失,android,notifications,reboot,Android,Notifications,Reboot,我是android编程新手。我有一个问题,我的应用程序的通知后,重新启动它消失 我的应用程序是关于自动转发短信,它也可以通过短信ba启用。我希望在应用程序启用时显示通知。我对通知有两个问题: 1.重新启动后通知消失 2.当通过短信启用应用程序时,通知不会出现 这是我的密码: SmsForwardConfig.java public class SmsForwarderConfig extends Activity { public static final String KEY_IS_ENABL

我是android编程新手。我有一个问题,我的应用程序的通知后,重新启动它消失

我的应用程序是关于自动转发短信,它也可以通过短信ba启用。我希望在应用程序启用时显示通知。我对通知有两个问题:

1.重新启动后通知消失

2.当通过短信启用应用程序时,通知不会出现

这是我的密码:

SmsForwardConfig.java

public class SmsForwarderConfig extends Activity {
public static final String KEY_IS_ENABLED = "SmsForwarderConfig_enabled";
public static final String KEY_IS_AUTO = "SmsForwarderConfig_auto";
public static final String KEY_SMS_NO = "SmsForwarderConfig_number";
public static final String APP_SET_NAME = "SmsForwarderConfig_g_cfg";
public static final String PASSWORD = "SmsForwarderConfig_pass";


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


final SharedPreferences mSettings = getSharedPreferences(APP_SET_NAME, MODE_PRIVATE);
final Button ok = (Button) findViewById(R.id.ok);
final TextView mTxtForwardTo = (TextView) findViewById(R.id.editText1);
final TextView password = (TextView) findViewById(R.id.editText2);
final TextView tx1 = (TextView) findViewById(R.id.textView1);
final TextView tx2 = (TextView) findViewById(R.id.textView2);
final TextView tx3 = (TextView) findViewById(R.id.textView3);
final TextView tx4 = (TextView) findViewById(R.id.textView4);
final CheckBox chk = (CheckBox) findViewById(R.id.checkBox1);
final CheckBox chk2 = (CheckBox) findViewById(R.id.checkBox2);
final ImageButton imgr = (ImageButton) findViewById(R.id.imgbtnr);
final ImageButton support = (ImageButton) findViewById(R.id.support);

Typeface font = Typeface.createFromAsset(getAssets(), "font.ttf");  
ok.setTypeface(font);
mTxtForwardTo.setTypeface(font);
password.setTypeface(font);
tx1.setTypeface(font);
tx2.setTypeface(font);
tx3.setTypeface(font);
tx4.setTypeface(font);

final NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
final Notification notify = new Notification(R.drawable.ic_launcher, "sms divert is enabled!", System.currentTimeMillis());
Context context = SmsForwarderConfig.this;
CharSequence title = "sms divert!";
CharSequence details = "sms divert is enabled!";
Intent intent = new Intent (context, SmsForwarderConfig.class);
PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);
notify.setLatestEventInfo(context, title, details, pending);
notify.flags = Notification.FLAG_ONGOING_EVENT;



//set pre entered values
if (mSettings.getBoolean(KEY_IS_ENABLED, false)) {

    chk.setChecked(true);


} else {

    chk.setChecked(false);
}

if (mSettings.getBoolean(KEY_IS_AUTO, false)) {
    chk2.setChecked(true);
} else {
    chk2.setChecked(false);
}
mTxtForwardTo.setText(mSettings.getString(KEY_SMS_NO, ""));
password.setText(mSettings.getString(PASSWORD, ""));

//prepare listener
ok.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {

        final String telNumber = mTxtForwardTo.getText().toString();
        final boolean isEnabled = chk.isChecked();
        final boolean remoteControl = chk2.isChecked();

        if (chk.isChecked()) {
            nm.notify(0, notify);
        } else {
            nm.cancel(0);
        }

        SharedPreferences.Editor editor = mSettings.edit();
        editor.putBoolean(KEY_IS_ENABLED, isEnabled);
        editor.putString(KEY_SMS_NO, telNumber);
        editor.putBoolean(KEY_IS_AUTO, remoteControl);
        editor.putString(PASSWORD, password.getText().toString());
        editor.commit();

    }
});

    imgr.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        Intent link = new Intent(Intent.ACTION_VIEW);
        link.setData(Uri.parse("bazaar://search?q=Ratin&c=apps"));
        startActivity(link);
    }
});

    support.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            startActivity(new Intent(SmsForwarderConfig.this, SupportActivity.class));

        }
    });

}
public class SmsReceiver extends BroadcastReceiver {


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

final SharedPreferences settings = context.getSharedPreferences(SmsForwarderConfig.APP_SET_NAME, Context.MODE_PRIVATE);
boolean isActive = settings.getBoolean(SmsForwarderConfig.KEY_IS_ENABLED, false);
final boolean isRemoteEnabled = settings.getBoolean(SmsForwarderConfig.KEY_IS_AUTO, false);
final String telNumber = settings.getString(SmsForwarderConfig.KEY_SMS_NO, "");

searchRemoteReq:
if (isRemoteEnabled && !isActive) {
    String password = settings.getString(SmsForwarderConfig.PASSWORD, "");
    if (password.trim().length() > 0) {
        Bundle bundle = intent.getExtras();
        SmsMessage[] msgs = null;
        if (bundle != null) {
            //---retrieve the SMS message received---
            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]);
                String message = msgs[i].getMessageBody().toString();
                if (message.contains(password)) {
                    isActive = true;
                    SharedPreferences.Editor editor = settings.edit();
                    editor.putBoolean(SmsForwarderConfig.KEY_IS_ENABLED, true);
                    editor.commit();
                    break searchRemoteReq;
                }
            }
        }

    }
}

if (isActive && telNumber != null && telNumber.length() > 0) {
    Log.v("SmsReceiver", "Is active: " + isActive);
    Log.v("SmsReceiver", "Tel Number: " + telNumber);
    sendSMS(context, intent, telNumber);
}
}

private void sendSMS(Context context, Intent intent, String phoneNumber) {
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
if (bundle != null) {
    //---retrieve the SMS message received---
    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]);
        SmsManager sms = SmsManager.getDefault();
        String from = msgs[i].getDisplayOriginatingAddress();
        String message = msgs[i].getMessageBody().toString();
        String all = from + ":" + message;
        Log.v("SmsReceiver", "SMS Message: " + all);
        sms.sendTextMessage(phoneNumber, null, all, null, null);
    }

}
}
}
和SmsReceiver.java

public class SmsForwarderConfig extends Activity {
public static final String KEY_IS_ENABLED = "SmsForwarderConfig_enabled";
public static final String KEY_IS_AUTO = "SmsForwarderConfig_auto";
public static final String KEY_SMS_NO = "SmsForwarderConfig_number";
public static final String APP_SET_NAME = "SmsForwarderConfig_g_cfg";
public static final String PASSWORD = "SmsForwarderConfig_pass";


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


final SharedPreferences mSettings = getSharedPreferences(APP_SET_NAME, MODE_PRIVATE);
final Button ok = (Button) findViewById(R.id.ok);
final TextView mTxtForwardTo = (TextView) findViewById(R.id.editText1);
final TextView password = (TextView) findViewById(R.id.editText2);
final TextView tx1 = (TextView) findViewById(R.id.textView1);
final TextView tx2 = (TextView) findViewById(R.id.textView2);
final TextView tx3 = (TextView) findViewById(R.id.textView3);
final TextView tx4 = (TextView) findViewById(R.id.textView4);
final CheckBox chk = (CheckBox) findViewById(R.id.checkBox1);
final CheckBox chk2 = (CheckBox) findViewById(R.id.checkBox2);
final ImageButton imgr = (ImageButton) findViewById(R.id.imgbtnr);
final ImageButton support = (ImageButton) findViewById(R.id.support);

Typeface font = Typeface.createFromAsset(getAssets(), "font.ttf");  
ok.setTypeface(font);
mTxtForwardTo.setTypeface(font);
password.setTypeface(font);
tx1.setTypeface(font);
tx2.setTypeface(font);
tx3.setTypeface(font);
tx4.setTypeface(font);

final NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
final Notification notify = new Notification(R.drawable.ic_launcher, "sms divert is enabled!", System.currentTimeMillis());
Context context = SmsForwarderConfig.this;
CharSequence title = "sms divert!";
CharSequence details = "sms divert is enabled!";
Intent intent = new Intent (context, SmsForwarderConfig.class);
PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);
notify.setLatestEventInfo(context, title, details, pending);
notify.flags = Notification.FLAG_ONGOING_EVENT;



//set pre entered values
if (mSettings.getBoolean(KEY_IS_ENABLED, false)) {

    chk.setChecked(true);


} else {

    chk.setChecked(false);
}

if (mSettings.getBoolean(KEY_IS_AUTO, false)) {
    chk2.setChecked(true);
} else {
    chk2.setChecked(false);
}
mTxtForwardTo.setText(mSettings.getString(KEY_SMS_NO, ""));
password.setText(mSettings.getString(PASSWORD, ""));

//prepare listener
ok.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {

        final String telNumber = mTxtForwardTo.getText().toString();
        final boolean isEnabled = chk.isChecked();
        final boolean remoteControl = chk2.isChecked();

        if (chk.isChecked()) {
            nm.notify(0, notify);
        } else {
            nm.cancel(0);
        }

        SharedPreferences.Editor editor = mSettings.edit();
        editor.putBoolean(KEY_IS_ENABLED, isEnabled);
        editor.putString(KEY_SMS_NO, telNumber);
        editor.putBoolean(KEY_IS_AUTO, remoteControl);
        editor.putString(PASSWORD, password.getText().toString());
        editor.commit();

    }
});

    imgr.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        Intent link = new Intent(Intent.ACTION_VIEW);
        link.setData(Uri.parse("bazaar://search?q=Ratin&c=apps"));
        startActivity(link);
    }
});

    support.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            startActivity(new Intent(SmsForwarderConfig.this, SupportActivity.class));

        }
    });

}
public class SmsReceiver extends BroadcastReceiver {


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

final SharedPreferences settings = context.getSharedPreferences(SmsForwarderConfig.APP_SET_NAME, Context.MODE_PRIVATE);
boolean isActive = settings.getBoolean(SmsForwarderConfig.KEY_IS_ENABLED, false);
final boolean isRemoteEnabled = settings.getBoolean(SmsForwarderConfig.KEY_IS_AUTO, false);
final String telNumber = settings.getString(SmsForwarderConfig.KEY_SMS_NO, "");

searchRemoteReq:
if (isRemoteEnabled && !isActive) {
    String password = settings.getString(SmsForwarderConfig.PASSWORD, "");
    if (password.trim().length() > 0) {
        Bundle bundle = intent.getExtras();
        SmsMessage[] msgs = null;
        if (bundle != null) {
            //---retrieve the SMS message received---
            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]);
                String message = msgs[i].getMessageBody().toString();
                if (message.contains(password)) {
                    isActive = true;
                    SharedPreferences.Editor editor = settings.edit();
                    editor.putBoolean(SmsForwarderConfig.KEY_IS_ENABLED, true);
                    editor.commit();
                    break searchRemoteReq;
                }
            }
        }

    }
}

if (isActive && telNumber != null && telNumber.length() > 0) {
    Log.v("SmsReceiver", "Is active: " + isActive);
    Log.v("SmsReceiver", "Tel Number: " + telNumber);
    sendSMS(context, intent, telNumber);
}
}

private void sendSMS(Context context, Intent intent, String phoneNumber) {
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
if (bundle != null) {
    //---retrieve the SMS message received---
    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]);
        SmsManager sms = SmsManager.getDefault();
        String from = msgs[i].getDisplayOriginatingAddress();
        String message = msgs[i].getMessageBody().toString();
        String all = from + ":" + message;
        Log.v("SmsReceiver", "SMS Message: " + all);
        sms.sendTextMessage(phoneNumber, null, all, null, null);
    }

}
}
}
公共类SmsReceiver扩展了BroadcastReceiver{
@凌驾
公共void onReceive(上下文、意图){
最终SharedReferences设置=context.getSharedReferences(smsforderConfig.APP\u SET\u NAME,context.MODE\u PRIVATE);
boolean isActive=settings.getBoolean(SMSForderConfig.KEY_已启用,false);
最终布尔值isRemoteEnabled=settings.getBoolean(smsfforwardconfig.KEY\u为自动,false);
最终字符串telNumber=settings.getString(smsforderconfig.KEY\u SMS\u NO,“”);
searchRemoteReq:
如果(isremotenabled&!isActive){
字符串密码=settings.getString(smsforderconfig.password,“”);
if(password.trim().length()>0){
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
if(bundle!=null){
//---检索收到的SMS消息---
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];
对于(int i=0;i0){
Log.v(“SmsReceiver”,“处于活动状态:+isActive”);
Log.v(“SmsReceiver”,“电话号码:”+电话号码);
sendSMS(上下文、意图、电话号码);
}
}
私有void sendSMS(上下文上下文、意图、字符串电话号码){
//---获取传入的SMS消息---
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
if(bundle!=null){
//---检索收到的SMS消息---
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];
对于(int i=0;i
您需要创建一个后台作业(android服务),该作业将在重新启动后运行,并查找保存的通知并显示它们。您的应用程序在重新启动后被终止,因此Android无法与其通信并显示通知

首先写一个“服务”,将通知逻辑移到那里。然后编写一个“BroadcastReceiver”,它将监听“android.intent.action.BOOT_COMPLETED”操作。当您收到此操作时,启动您的服务。