Ich versuche, eine App für die bedingte Anrufumleitung zu entwickeln, wenn der Teig für bestimmte Netzwerkanbieter, die die bedingte Anrufumleitung nicht unterstützen, auf ein bestimmtes Niveau sinkt. Ich bin nur ein Anfänger. Bitte hilf mir. Weil wir den Service oder etwas anderes nicht anrufen können, überprüfen Sie bitte die Fehlermeldung und schlagen Sie sorgfältig vor. Es wäre eine große Hilfe für mich. mein Service geht soWarum stürzt meine Android-App beim Ausführen dieses Dienstes ab?
package com.cospirit.nonprogress;
import android.Manifest;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.BatteryManager;
import android.os.IBinder;
import android.support.v4.app.ActivityCompat;
public class MyService extends Service {
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = getApplicationContext().registerReceiver(null, ifilter);
boolean charginginfo = false;
SharedPreferences spdf1 = getSharedPreferences("divertInfo", Context.MODE_PRIVATE);
String numberDivert;
int batterylevel = Integer.parseInt(spdf1.getString("battery_Level", ""));
boolean divert ;
public MyService()
{}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Runnable r = new Runnable() {
public void run() {
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int chargingStatus = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
charginginfo = chargingStatus == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;
divert = false;
synchronized (this) {
while (status > 30 || charginginfo == true) {
if (divert == true) {
cancelDivert();
divert = false;
status = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
}
}
while (batterylevel < status && status < 30 && charginginfo == false) {
if (divert == true) {
cancelDivert();
divert = false;
status = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
}
}
while ((status < batterylevel || status == batterylevel) && charginginfo == false) {
if (divert == false) {
divertCalls();
divert = true;
status = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
}
}
}
}
};
Thread tr = new Thread(r);
tr.start();
return START_REDELIVER_INTENT;
}
public void divertCalls() {
try {
spdf1 = getSharedPreferences("divertInfo", Context.MODE_PRIVATE);
numberDivert = spdf1.getString("phone_details", "");
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("**21*" + numberDivert + "#"));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_FROM_BACKGROUND);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
startActivity(intent);
}
catch(Exception ep)
{
ep.printStackTrace();
}
}
public void cancelDivert() {
try {
Intent intents = new Intent(Intent.ACTION_CALL);
intents.setData(Uri.parse("#21#"));
intents.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intents.addFlags(Intent.FLAG_FROM_BACKGROUND);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
return;
}
startActivity(intents);
}
catch(Exception ep)
{
ep.printStackTrace();
}
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
XML-Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cospirit.nonprogress">
<uses-permission android:name="android.permission.CALL_PHONE" />
<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>
<service
android:name=".MyService"
android:enabled="true"
android:exported="true"></service>
</application>
</manifest>
Fehler msg
12-13 01:08:23.222 12033-12033/com.cospirit.nonprogress E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.cospirit.nonprogress, PID: 12033
java.lang.RuntimeException: Unable to instantiate service com.cospirit.nonprogress.MyService: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2862)
at android.app.ActivityThread.-wrap4(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1427)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:107)
at com.cospirit.nonprogress.MyService.<init>(MyService.java:19)
at java.lang.Class.newInstance(Native Method)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2859)
at android.app.ActivityThread.-wrap4(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1427)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Was sagt die Logcat-Fehlermeldung? – ianhanniballake
bearbeitet bitte helfen –
'OnBind (Intent Intent)' gibt null zurück ... das wird sicherlich ein Problem sein. Es ist die 'IBinder'-Schnittstelle, die es einer Anwendung ermöglicht, mit dem Dienst zu sprechen ... –