我正在做我的最后一个项目,请帮助我,我必须在下周末之前提交它我正在开发一个基于上下文过滤来电的应用程序,首先我想接收来电号码并传递给一个活动在数据库上搜索数字并返回结果,我不知道如何从广播接收器获取变量并再次传递给它,我的意思是获取并将变量传递给只有 1 个广播接收器所以我决定使用 2 个广播接收器,其中一个接收传入的数字并传递给我的主类和我的 mainCalss 在数据库中搜索传入号码并将结果传递给 filterCall 广播类,但我遇到了问题。请帮助我,tHX
这是我的 callActivity 广播类,它接收传入的号码并传递给我的 Mainclass
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();
}
}
}
这是我的 mainClass,它从 CallBlockingActivity 广播类中获取传入号码并在数据库中搜索并返回一个布尔值
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);
}
}
这是我的过滤器广播类,它拒绝来电或将手机设置为静音模式。
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>