我正在使用BackupManager
创建android
中的备份应用程序,但由于备份实际上发生在计划时间不及时,我只是想知道如何在dialogbox
中显示onBackup()
被调用的消息,现在您的数据保存在谷歌服务器上。主要问题是对话框的上下文应该是什么?到目前为止,我已经尝试过了,但是当onBackup()
被调用时,它没有显示
AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
builder.setTitle("BACKUP ALERT");
builder.setMessage("Your Backup has been processed");
builder.setPositiveButton("OK", null);
AlertDialog dialog = builder.show();
我在onBackup()
方法中写了这个,但它没有显示在我的应用程序上。我想在备份发生时显示此消息,用户打开我的应用程序,或者如果他已经打开,我想显示它,无论哪个活动是前台的时间,或者有人能给我的想法如何使它在android notification
栏notification
。
在我创建和显示对话框的行Logcat
上有一个错误…
12-28 13:22:52.722: E/JavaBinder(16540): *** Uncaught remote exception! (Exceptions are not yet supported across processes.)
12-28 13:22:52.722: E/JavaBinder(16540): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
12-28 13:22:52.722: E/JavaBinder(16540): at android.os.Handler.<init>(Handler.java:121)
12-28 13:22:52.722: E/JavaBinder(16540): at android.app.Dialog.<init>(Dialog.java:107)
12-28 13:22:52.722: E/JavaBinder(16540): at android.app.AlertDialog.<init>(AlertDialog.java:118)
12-28 13:22:52.722: E/JavaBinder(16540): at android.app.AlertDialog$Builder.create(AlertDialog.java:971)
12-28 13:22:52.722: E/JavaBinder(16540): at com.vahzay.android.smstrove.MySmsBackupAgent1.onBackup(MySmsBackupAgent1.java:233)
12-28 13:22:52.722: E/JavaBinder(16540): at android.app.backup.BackupAgent$BackupServiceBinder.doBackup(BackupAgent.java:490)
12-28 13:22:52.722: E/JavaBinder(16540): at android.app.IBackupAgent$Stub.onTransact(IBackupAgent.java:80)
12-28 13:22:52.722: E/JavaBinder(16540): at android.os.Binder.execTransact(Binder.java:338)
12-28 13:22:52.722: E/JavaBinder(16540): at dalvik.system.NativeStart.run(Native Method)
和我的对话框的代码是:
new AlertDialog.Builder(getApplicationContext())
.setMessage("Backup Alert")
.setPositiveButton("Ok", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface arg0, int arg1)
{
Toast.makeText(getApplicationContext(), "Your SMS Record that you requested to backup earlier is now processed", Toast.LENGTH_LONG).show(); //-->233
}
}).create().show();
}
尝试改变,
AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
,
AlertDialog.Builder builder = new AlertDialog.Builder(getBaseContext());
编辑:另一个选项是来自应用程序类, 的静态上下文
public class MyApplication extends Application{
private static Context context;
public void onCreate(){
super.onCreate();
MyApplication.context = getApplicationContext();
}
public static Context getAppContext() {
return MyApplication.context;
}
}
现在从任何地方调用
MyApplication.getAppContext()
静态获取应用程序上下文
谢谢。
只是一个想法,如果它有效。我观察到我们需要同时使用.create()
和.show()
来显示alertDialiog
。
所以试着用builder.create().show();
编辑-我有以下工作代码为我,
new AlertDialog.Builder(getApplicationContext())
.setMessage("Network is in Roaming")
.setPositiveButton("Ok", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface arg0, int arg1)
{
}
}).create().show();
如果它不工作,那么你可以调用一个活动,并在活动中显示相同的对话框。您可以将活动设置为透明的,这样只有对话框是可见的。
试试这个方法可能会有帮助
new AlertDialog.Builder(youractivity.this);
让我们试一下
- 创建一个静态Context;
- 然后在你的activity onCreate中写mContext = youractivity.this;
- 就是这样简单的调用静态变量就像mContext;