조건부 호출 전환을 지원하지 않는 네트워크 공급자가 특정 수준으로 이동하면 조건부 호출 전환을위한 앱을 개발하려고합니다. 나는 단지 시작이다. 도와주세요. 서비스에서 전화를 걸 수 없기 때문에 오류 메시지를 확인하고주의 깊게 제안하십시오. 그것은 나를 위해 큰 도움이 될 것입니다. 내 서비스는 또한 서비스가 문맥 당신의 onStartCommand
왜이 서비스를 실행하는 동안 내 Android 앱이 다운 되나요?
에 매니페스트이
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
<?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>
오류 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)
logcat 오류 메시지의 내용은 무엇입니까? – ianhanniballake
편집 도움주세요 –
'onBind (Intent intent)'는 null을 반환합니다 ... 확실히 문제가 될 것입니다. 애플리케이션이 서비스와 통신 할 수있게 해주는 IBinder 인터페이스입니다 ... –