android - 如何将变量传递给broadCastReceiver

标签 android eclipse broadcastreceiver android-manifest

我正在做我的期末项目,请帮助我,我必须在下周末之前提交它 我正在开发一个根据上下文过滤来电的应用程序,首先我想获取传入号码并传递给 Activity 以在数据库上搜索号码并返回结果,我不知道如何从广播接收器获取变量并将其传递给它再说一次,我的意思是获取变量并将其传递给 1 个广播接收器,所以我决定使用 2 个广播接收器,其中一个接收传入号码并传递给我的主类,我的 mainCalss 在数据库上搜索传入号码并将结果传递给 filterCall 广播类,但是我遇到了问题。请帮助我,tHX

这是我的 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 广播类获取传入号码并在数据库中搜索并返回 bool 值

 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)

这是我的 list

 <?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>

最佳答案

Mainclass.java 第 39 行出现 nullPointerException

“b”有可能返回 null

Intent b = getIntent();

添加

if(b != null) {
    //code involving the use of b
}

关于android - 如何将变量传递给broadCastReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11815354/

相关文章:

android - 如何在android中删除接收短信通知

java - 如何从 WakefulBroadcastReceiver 启动 IntentService

android - 从广播接收器更新应用程序状态(全局变量)

android - 在 Android 抽屉导航中切换

java - SQlite android中的多个表

java - 任何 Eclipse 自动完成插件?

java - Android JSON 转换后抛出异常(仅限设备端)

java - android 应用程序-javax.net.ssl.SSLHandshakeException : Trust anchor for certification path not found - Standard Android browser work without any problems

Android 删除换行符

java - Google CodeStyle for Eclipse 格式化程序显示版本警告