我正在用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);
答案 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);
}