如何在服务中振动手机?

时间:2015-08-07 17:39:41

标签: java android

我正在用android studio编程。我想要一个振动手机的程序。即使你不打开应用程序。所以它应该在后台,我想我必须在服务中写它。但它引发了一个例外。如何解决?

MainActivity:

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Intent i= new Intent(MainActivity.this,Silent.class);
    startService(i);


}

无声服务:

public class Silent extends Service {
public Silent() {
    AudioManager myAudioManager;
    myAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    myAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);

}

它引发了异常:

  

Silent.java.12上的java.lang.NullPointerException

它发生在这一行:

myAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

2 个答案:

答案 0 :(得分:1)

另一个答案:

在启动时触发广播接收器。

或者另一种方法是:

public class MainActivity extends ActionBarActivity {

    private String TAG = "TAG";

    @Override
    public void onCreate(Bundle bundle){
        super.onCreate(bundle);
        Log.e(TAG, "onCreate");
        Vibrator mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
        mVibrator.vibrate(500);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}

您必须在Android Manifest.xml中添加:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="nope.myapplicationvibrate" >

    <uses-permission android:name="android.permission.VIBRATE"></uses-permission>

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

</manifest>

您需要让管理员存储(并提供)一个Context对象才能使用:

(振动器)Context.getSystemService(Context.VIBRATOR_SERVICE)方法。

希望它有所帮助。

答案 1 :(得分:0)

我建议你在服务的onCreate()方法中移动构造函数代码,这将在创建服务时调用。最有可能的是,您试图在服务的生命周期中过早地使用audiomanager。你可以这样做:

@Override 
public void onCreate() {
AudioManager myAudioManager;
myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
myAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
}