java - Android/Java - 从另一个文件调用 RingtoneManager 实例方法

标签 java android-layout

希望是一个基本的(学校项目)问题:

在接下来的代码中,我试图在 Alerts.java 中定义一个实例方法,以便在满足 SensorService.java 中的条件时生成铃声。

为了调试,我添加了 Log.d 和一个“返回字符串”——两者都可以在 Alerts.java 中完美运行。

我这辈子都无法从 Alerts.java 获取铃声代码。如果我将铃声代码放在 SensorService.java 中 - 没有问题。但是,我想实现至少 3 或 4 种不同类型的警报(并且更愿意将此代码包含在 Alerts.java 中——保持 SensorService.java 可读/可管理)。

文件名:SensorService.java

[...]
public class SensorService extends Service implements SensorEventListener {
[...]
public void onSensorChanged(SensorEvent event) {
    float x = event.values[0];
    Log.d("ADebugTag", Float.toString(x));

    Alerts al = new Alerts ();
    String myInstanceString = al.audible();
    System.out.println(myInstanceString);
    // Generate an audible tone when Sensor detects movement.
    if ( x > 2) al.audible();
}
[...]

文件名:Alerts.java

[...]
public class Alerts {
[...]
public String audible () {
    Log.d("1", "tick!");
    Uri ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
    Ringtone ringtoneSound = RingtoneManager.getRingtone(context, ringtoneUri);
    ringtoneSound.play();
    return "This is an instance function.";
}
[...]

调试控制台:

12-15 14:29:49.994  12899-12899/com.pikpocket.pikpocket E/RingtoneManager﹕
Failed to open ringtone content://settings/system/alarm_alert:
java.lang.NullPointerException
12-15 14:29:49.994  12899-12899/com.pikpocket.pikpocket W/dalvikvm﹕ 
threadid=1: thread exiting with uncaught exception (group=0x41569438)
12-15 14:29:49.994  12899-12899/com.pikpocket.pikpocket E/AndroidRuntime﹕
FATAL EXCEPTION: main
java.lang.NullPointerException
        at com.pikpocket.pikpocket.Alerts.audible(Alerts.java:31)
        at 
com.pikpocket.pikpocket.SensorService.onSensorChanged(SensorService.java:78)
        at 
android.hardware.SystemSensorManager$ListenerDelegate$1.handleMessage(SystemSensorManager.java:250)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4918)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
        at dalvik.system.NativeStart.main(Native Method)

提前致谢!

最佳答案

我遇到过好几次这种问题,我不知道为什么会这样,但我有一个可能适用于你的情况的解决方法。尝试在 al.audible() 调用上返回一个铃声对象,然后从 SensorService 播放它:

在 SensorService.java 中

public class SensorService extends Service implements SensorEventListener {
public void onSensorChanged(SensorEvent event) {
    float x = event.values[0];
    Log.d("ADebugTag", Float.toString(x));

    Alerts al = new Alerts ();
    Ringtone myRingtone = al.audible();
    myRingtone.play();
}}

在 Alerts.java 中

public class Alerts {
public Ringtone audible () {
    Log.d("1", "tick!");
    Uri ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
    Ringtone ringtoneSound = RingtoneManager.getRingtone(context, ringtoneUri);
    return ringtoneSound;
}}

如果这不能解决您的问题,您可能应该查看铃声路径。

希望对您有所帮助。

关于java - Android/Java - 从另一个文件调用 RingtoneManager 实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34298582/

相关文章:

java - 如何在 Java 中分配数组的数组?

java - 将图形绕给定点旋转一定角度

java - 验证方法的良好命名约定是什么?

java - 带按钮的列表

android - TextView 和 RelativeLayout onMeasure 调用了很多

android - 在 Android 中包含布局或包含 fragment 有什么区别?

java - onKeyDown 不起作用

java - 将文本设置为 fragment 中的 TextView

java - 是否有任何存档格式既支持对许多小条目的有效压缩,又支持对单个条目的直接访问?

java标准库产生错误的xml 1.1