私は最終的なプロジェクトに取り組んでいます。助けてください。来週の終わりまで提出する必要があります。コンテキストに基づいて着信通話をフィルタリングするアプリに取り組んでいます。最初に、着信番号を取得してアクティビティに渡したいです。データベースで番号を検索して結果を返します。ブロードキャストレシーバーから変数を取得して再度渡す方法がわかりません。変数を取得して1つのブロードキャストレシーバーに渡すことを意味するので、2つのBroadCastReceiverを使用することにしました。メインクラスに渡し、データベースで受信番号を検索し、結果をfilterCallブロードキャストクラスに渡しますが、問題に直面しました。助けてください、tHX
これは、着信番号を受け取り、メインクラスに渡す callActivity ブロードキャスト クラスです。
public class CallblockingActivity extends BroadcastReceiver {
Context context = null;
private static final String TAG = "Phone call";
private ITelephony telephonyService;
String incommingNumber;
Intent intent;
String n;
@Override
public void onReceive(Context context, Intent intent) {
Log.v(TAG, "Receving....");
TelephonyManager telephony = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
try {
Class c = Class.forName(telephony.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
telephonyService = (ITelephony) m.invoke(telephony);
Bundle b = intent.getExtras();
incommingNumber = b.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
Log.v(TAG, incommingNumber);
Intent i = new Intent(context, Mainclass.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("n",incommingNumber);
context.startActivity(i);
Log.v(TAG, incommingNumber);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
そして、これは CallBlockingActivity ブロードキャスト クラスから着信番号を取得し、データベースを検索してブール値を返す私の mainClass です。
public class Mainclass extends Activity{
Context context = null;
Boolean isit= false;
String TAG;
public void onCreate(Bundle savedInstanceState) {
Log.v(TAG,"onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent b= getIntent();
String incomiingnumber1= b.getStringExtra("n");
Log.v(TAG,incomiingnumber1 + "incomenuber from broadcast receiver");
DataBaseBON searching= new DataBaseBON(Mainclass.this);
searching.open();
isit= searching.searchnumber(incomiingnumber1);
String ss= new Boolean(isit).toString();
Toast.makeText(getApplicationContext(), ss, Toast.LENGTH_SHORT);
Log.v(TAG, ss+ "yeeeeeeees it is it");
searching.close();
// I think My problem is here
Intent in = new Intent(context, FilterCall.class);
Bundle bb = new Bundle();
bb.putString("keyvalue", "ss");
in.putExtras(bb);
startActivity(in);
}
}
これは、通話を拒否するか、電話をサイレント モードに設定する Filter BroadcastClass です。
public class FilterCall extends BroadcastReceiver {
private ITelephony telephonyService;
String TAG;
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.v(TAG, "Filtering...");
TelephonyManager telephony = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
try {
Class c = Class.forName(telephony.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
telephonyService = (ITelephony) m.invoke(telephony);
String result = intent.getStringExtra("keyvalue");
if (result=="true") {
try {
telephonyService.silenceRinger();
telephonyService.endCall();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
私はこの問題に直面しています:
08-05 16:58:50.468: W/IInputConnectionWrapper(1500): showStatusIcon on inactive InputConnection
08-05 16:58:50.958: V/(1500): Filtering...
08-05 16:58:51.118: V/Phone call(1500): Receving....
08-05 16:58:51.118: V/Phone call(1500): +60172214866
08-05 16:58:51.138: V/Phone call(1500): +60172214866
08-05 16:58:51.168: V/(1500): onCreate
08-05 16:58:51.248: V/(1500): +60172214866incomenuber from broadcast receiver
08-05 16:58:51.278: I/Database(1500): SQLiteDatabase open path: /data/data/com.vahid.davoudi/databases/databasebon.db
08-05 16:58:51.338: V/(1500): trueyeeeeeeees it is it
08-05 16:58:51.338: I/Database(1500): SQLiteDatabase close path: /data/data/com.vahid.davoudi/databases/databasebon.db
08-05 16:58:51.348: A/dalvikvm(1500): Exception!!! threadid=1: thread exiting with uncaught exception (group=0x4001d858)
08-05 16:58:51.388: E/AndroidRuntime(1500): FATAL EXCEPTION: main
08-05 16:58:51.388: E/AndroidRuntime(1500): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.vahid.davoudi/com.vahid.davoudi.Mainclass}: java.lang.NullPointerException
08-05 16:58:51.388: E/AndroidRuntime(1500): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
08-05 16:58:51.388: E/AndroidRuntime(1500): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-05 16:58:51.388: E/AndroidRuntime(1500): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
08-05 16:58:51.388: E/AndroidRuntime(1500): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-05 16:58:51.388: E/AndroidRuntime(1500): at android.os.Handler.dispatchMessage(Handler.java:99)
08-05 16:58:51.388: E/AndroidRuntime(1500): at android.os.Looper.loop(Looper.java:123)
08-05 16:58:51.388: E/AndroidRuntime(1500): at android.app.ActivityThread.main(ActivityThread.java:4627)
08-05 16:58:51.388: E/AndroidRuntime(1500): at java.lang.reflect.Method.invokeNative(Native Method)
08-05 16:58:51.388: E/AndroidRuntime(1500): at java.lang.reflect.Method.invoke(Method.java:521)
08-05 16:58:51.388: E/AndroidRuntime(1500): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
08-05 16:58:51.388: E/AndroidRuntime(1500): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
08-05 16:58:51.388: E/AndroidRuntime(1500): at dalvik.system.NativeStart.main(Native Method)
08-05 16:58:51.388: E/AndroidRuntime(1500): Caused by: java.lang.NullPointerException
08-05 16:58:51.388: E/AndroidRuntime(1500): at android.content.ComponentName.<init>(ComponentName.java:75)
08-05 16:58:51.388: E/AndroidRuntime(1500): at android.content.Intent.<init>(Intent.java:2690)
08-05 16:58:51.388: E/AndroidRuntime(1500): at com.vahid.davoudi.Mainclass.onCreate(Mainclass.java:39)
08-05 16:58:51.388: E/AndroidRuntime(1500): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-05 16:58:51.388: E/AndroidRuntime(1500): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
08-05 16:58:51.388: E/AndroidRuntime(1500): ... 11 more
08-05 17:03:51.408: W/PrintK(1500): m.vahid.davoudi(1500) sends SIGKILL to m.vahid.davoudi(1500)
そしてこれが私のマニフェストです
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.vahid.davoudi"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".Mainclass"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".CallBlockingOrginalActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ViewDatabase"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.VIEWDB" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<receiver android:name=".CallblockingActivity">
<intent-filter >
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
<receiver android:name=".FilterCall">
<intent-filter android:priority="100" >
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
</application>
</manifest>