Я работаю над своим окончательным проектом, пожалуйста, помогите мне, я должен представить его до конца следующей недели im работает над приложением, которое фильтрует входящие вызовы на основе контекста, сначала i хочу принять входящий номер и перейти к Activity для поиска номера на базе данных и вернуть результат, я не знаю, как получить переменную извещателя и передать его снова, я имею в виду получить и передать переменную только 1 broadcastReceiver, поэтому я решил используйте 2 BroadCastReceiver, из них возьмите входящий номер и перейдите к моему основному классу, и мои mainCalss ищут входящий номер в базе данных и передают результат фильтруемому классу вещания, но я столкнулся с проблемой .please help me, tHXКак передать переменную broadCastReceiver
Это мой класс CallActivity Broadcast, который принимает входящее число Бер и перейти к моему 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);
}
}
И это мой фильтр 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>
дорогого @Ankit спасибо за ваше предложение, но то, что вы имеете в виду я могу сразу найти этот номер на базе данных из приемников на получение и whould скажите, пожалуйста, как используйте только один broadCastReceiver, потому что в первом BroadcastReceiver я просто беру входящий номер и запускаю новую активность, отправляя намерение, так как можно вернуть результат в том же широковещательном_последователе, не могли бы вы дать мне пример. Исправьте мой плохой английский. – developer
ваш английский не беден, какова беда ваша основа Android и Java, я не могу преподавать здесь. вы должны сначала изучить основы Java, а затем прочитать документы для Android ... для локальной проблемы снова см. мой обновленный ответ. – AAnkit
дорогой @ Анкит, да, вы правы, СПАСИБО ЗА ВАШУ БОЛЬШУЮ ПОМОЩЬ В РЕШЕНИИ МОИХ ПРОБЛЕМ. Проблема решена :) – developer