2017-10-06 117 views
-1

我试图制作一个闹钟应用程序,该应用程序在DialogFragment中显示TimePicker,但每次点击切换时,我的应用程序崩溃。在DialogFrament中显示TimePicker时报警应用程序崩溃

这里是我从中找到了源代码此链接:http://codingconnect.net/android-application-creates-alarm-clock/

此外,如何存放时间格式的对象在我的数据库?

对话框

package com.example.asus.test8; 


import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.DialogFragment; 
import android.support.v7.app.AppCompatActivity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TimePicker; 
import android.widget.Toast; 
import android.widget.ToggleButton; 

import java.util.Calendar; 

public class dialog extends DialogFragment 
{ 


TimePicker alarmTimePicker; 
PendingIntent pendingIntent; 
AlarmManager alarmManager; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
container, @Nullable Bundle savedInstanceState) { 
    View view= inflater.inflate(R.layout.dialog,container,false); 
    alarmTimePicker = (TimePicker) 
getActivity().findViewById(R.id.timePicker); 
    alarmManager = (AlarmManager) 
getActivity().getSystemService(Context.ALARM_SERVICE); 
    return view; 
} 
public void OnToggleClicked(View view) 
{ 
long time; 
if (((ToggleButton) view).isChecked()) 
{ 
    Toast.makeText(getActivity(), "ALARM ON", Toast.LENGTH_SHORT).show(); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour()); 
    calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute()); 
    Intent intent = new Intent(getActivity(), AlarmReceiver.class); 
    pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, intent, 0); 

    time=(calendar.getTimeInMillis()-(calendar.getTimeInMillis()%60000)); 
    if(System.currentTimeMillis()>time) 
    { 
     if (calendar.AM_PM == 0) 
      time = time + (1000*60*60*12); 
     else 
      time = time + (1000*60*60*24); 
    } 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, time, 10000, 
pendingIntent); 
} 
else 
{ 
    alarmManager.cancel(pendingIntent); 
    Toast.makeText(getActivity(), "ALARM OFF", Toast.LENGTH_SHORT).show(); 
} 
} 
} 

MainActivity

package com.example.asus.test8; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v4.app.FragmentManager; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ListView; 

public class MainActivity extends AppCompatActivity { 

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

    ListView l; 
    l= (ListView) findViewById(R.id.listView); 

    FloatingActionButton fab = (FloatingActionButton) 
findViewById(R.id.fab); 

} 
public void click(View v) 
{ 

FragmentManager fm=getSupportFragmentManager(); 
dialog dg=new dialog(); 
dg.show(fm,"TAG"); 
} 

AlarmReceiver

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.media.Ringtone; 
import android.media.RingtoneManager; 
import android.net.Uri; 
import android.support.v4.content.WakefulBroadcastReceiver; 
import android.widget.Toast; 

public class AlarmReceiver extends WakefulBroadcastReceiver 
{ 
@Override 
public void onReceive(Context context, Intent intent) 
{ 
    Toast.makeText(context, "Alarm! Wake up! Wake up!", 
Toast.LENGTH_LONG).show(); 
    Uri alarmUri = 
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
    if (alarmUri == null) 
    { 
     alarmUri = 
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    } 
    Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri); 
    ringtone.play(); 

} 
} 

AndroidManifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.asus.test8"> 


<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme" > 
    <activity android:name=".MainActivity" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <receiver android:name="com.example.asus.test8.AlarmReceiver" > 
    </receiver> 
</application> 

</manifest> 
+3

张贴您的logcats – sasikumar

+0

正如sasikumar所说,我们需要查看您的logcats的任何错误,这可能有助于更轻松地解释代码中的问题。 –

回答

1

尝试添加​​,不要忘记在YourActivity检查请求的权限。

+0

查询请求? –

+1

是的。 “从Android 6.0(API级别23)开始,用户可以随时撤销任何应用程序的权限”https://developer.android.com/training/permissions/requesting.html – Dungnbhut

+0

试过它没有用。 –