2015-04-12 81 views
0

我的应用需要设置多个报警 我想在报警触发时显示自定义对话框。如何在报警触发时打开自定义对话框

我的接收机类是

package com.example.memopad; 

import java.util.zip.Inflater; 








import android.app.Dialog; 
import android.app.FragmentManager; 
import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Build; 
import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 



public class AlarmReceiver extends BroadcastReceiver{ 


    String dato; 





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

      dato=intent.getStringExtra("nome"); 

      lanciaDialog(); 

      //Toast toast =Toast.makeText(context, "Oggi e' il compleanno di " + dato , Toast.LENGTH_SHORT); 
      // toast.show(); 





} 
    public void lanciaDialog(){ 

     DialogFragment dialog = new CustomDialogCumple(); 
     dialog.show(getSupportFragmentManager(), "missiles"); 

    } 



    } 

我CustomDialogCumple类是

package com.example.memopad; 

import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 
import android.view.LayoutInflater; 

public class CustomDialogCumple extends DialogFragment { 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the Builder class for convenient dialog construction 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     builder.setView(inflater.inflate(R.layout.customdialogcumple, null)); 
     builder.setMessage(R.string.cumple) 
       /*.setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 

        } 
       })*/ 
       .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         // User cancelled the dialog 
        } 
       }); 
     // Create the AlertDialog object and return it 
     return builder.create(); 
    } 
} 

我有dialog.show(getSupportFragmentManager(), “导弹”)问题;

我用了一个Dialogfragment根据谷歌指南 你有什么提示吗? 在此先感谢

+0

那么问题是什么?它是运行时错误/编译时错误吗?有没有日志? – Kay

回答

1

你要做的是从一个BroadcastReceiver显示一个对话框 - 这是不允许在Android中。您只能从活动中显示对话框。你可以做的是让BroadcastReceiver启动一个Activity,然后显示对话框。更多信息请参阅this blog

正如你所看到的,如果活动目前不可见,或者如果活动是(在你的情况下是显示对话框),他会发送一个通知。

+1

我做了类似的事情,但总是需要出现一个对话框,所以我打开了一个没有内容的透明的全屏活动。这个空白的活动然后显示对话框。 – cYrixmorten

+0

你必须有某种活动来显示对话框。否则不可能。这种设计模式会导致活动或通知场景,如果您没有运行Activity,则会创建可从广播接收器完成的通知。 – ucsunil

+0

非常感谢。我会按照你的提示。 –