Android4 自动接电话,急求Android5和Android6 接电话的Demo

开发工具:eclipse

MainActivity.java

自动生成后不做操作。

AutoAnswerReceiver.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.telephony.TelephonyManager;

public class AutoAnswerReceiver extends BroadcastReceiver {
	
<span style="white-space:pre">	</span>@Override
	public void onReceive(Context context, Intent intent) {

		String phone_state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);

		if (phone_state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
			AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
			if (am.getMode() == AudioManager.MODE_IN_CALL) {
				return;
			}
			context.startService(new Intent(context, AutoAnswerIntentService.class));
		}		
	}
}

AutoAnswerIntentService,java

public class AutoAnswerIntentService extends IntentService {

	public AutoAnswerIntentService() {
		super("AutoAnswerIntentService");
	}

	@Override
	protected void onHandleIntent(Intent intent) {
		Context context = getBaseContext();

		 try {
		 Thread.sleep(5000);   //answer the ringing call after 5 seconds
		 } catch (InterruptedException e) {
		
		 }

		TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
		if (tm.getCallState() != TelephonyManager.CALL_STATE_RINGING) {
			return;
		}

		try {
			answerPhoneAidl(context);
		} catch (Exception e) {
			e.printStackTrace();
			Log.d("AutoAnswer", "Error trying to answer using telephony service.  Falling back to headset.");
			answerPhoneHeadsethook(context);
		}
		
		return;
	}

	private void answerPhoneHeadsethook(Context context) {

		Intent buttonDown = new Intent(Intent.ACTION_MEDIA_BUTTON);
		buttonDown.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK));
		context.sendOrderedBroadcast(buttonDown, "android.permission.CALL_PRIVILEGED");

		Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON);
		buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK));
		context.sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED");
	}

	@SuppressWarnings("unchecked")
	private void answerPhoneAidl(Context context) throws Exception {

		TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
		Class c = Class.forName(tm.getClass().getName());
		Method m = c.getDeclaredMethod("getITelephony");
		m.setAccessible(true);
		ITelephony telephonyService;
		telephonyService = (ITelephony) m.invoke(tm);
		telephonyService.answerRingingCall();
	}
}

AndroidManifest.xml

权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> 
receiver:

<receiver
<span style="white-space:pre">	</span>android:name=".AutoAnswerReceiver"
<span style="white-space:pre">	</span>android:enabled="true" >
<span style="white-space:pre">	</span><intent-filter>
<span style="white-space:pre">		</span><action android:name="android.intent.action.PHONE_STATE" />
<span style="white-space:pre">	</span></intent-filter>
</receiver>

Service

 <service android:name="AutoAnswerIntentService" />


给个下载链接:http://download.csdn.net/detail/kylsen/9674393

这个Demo打开后就能在响铃后5秒自动接电话,目前实测能在Android 4.3和Android 4.4机上实现,但是Android 5以上的都不行,希望有Android 5或Android 6接电话的Demo,能和大家一起分享,我邮箱1191330082@qq.com。


下面是一个简单的借还书系统的C语言程序,可以作为参考: ```c #include<stdio.h> #include<string.h> //定义结构体 struct book { char name[50]; char author[50]; int num; int borrowed; }; //定义全局变量,表示图书馆中的图书数量 int n=0; //函数声明 void add_book(); void borrow_book(); void return_book(); void display_books(); void display_borrowed_books(); void display_menu(); int main() { int choice; do { display_menu(); scanf("%d",&choice); switch(choice) { case 1: add_book(); break; case 2: borrow_book(); break; case 3: return_book(); break; case 4: display_books(); break; case 5: display_borrowed_books(); break; case 6: printf("退出系统!\n"); break; default: printf("输入错误,请重新输入!\n"); } } while(choice!=6); return 0; } void add_book() { struct book b; printf("请输入书名:"); scanf("%s",b.name); printf("请输入作者:"); scanf("%s",b.author); printf("请输入数量:"); scanf("%d",&b.num); b.borrowed=0; //将新书添加到图书馆中 books[n]=b; n++; printf("添加成功!\n"); } void borrow_book() { char name[50]; printf("请输入要借的书名:"); scanf("%s",name); int found=0; for(int i=0;i<n;i++) { if(strcmp(books[i].name,name)==0) { found=1; if(books[i].num>books[i].borrowed) { books[i].borrowed++; printf("借书成功!\n"); } else { printf("该书已被借完!\n"); } break; } } if(!found) { printf("找不到该书!\n"); } } void return_book() { char name[50]; printf("请输入要还的书名:"); scanf("%s",name); int found=0; for(int i=0;i<n;i++) { if(strcmp(books[i].name,name)==0) { found=1; if(books[i].borrowed>0) { books[i].borrowed--; printf("还书成功!\n"); } else { printf("该书没有被借出!\n"); } break; } } if(!found) { printf("找不到该书!\n"); } } void display_books() { printf("图书馆中的图书如下:\n"); printf("书名\t作者\t数量\t已借出数量\n"); for(int i=0;i<n;i++) { printf("%s\t%s\t%d\t%d\n",books[i].name,books[i].author,books[i].num,books[i].borrowed); } } void display_borrowed_books() { printf("已借出的图书如下:\n"); printf("书名\t作者\t已借出数量\n"); for(int i=0;i<n;i++) { if(books[i].borrowed>0) { printf("%s\t%s\t%d\n",books[i].name,books[i].author,books[i].borrowed); } } } void display_menu() { printf("\n请选择操作:\n"); printf("1. 添加图书\n"); printf("2. 借阅图书\n"); printf("3. 归还图书\n"); printf("4. 显示全部图书\n"); printf("5. 显示已借出图书\n"); printf("6. 退出系统\n"); printf("请输入数字选择操作:"); } ``` 该程序通过定义结构体 `book` 来表示每一本书,其中包含书名、作者、数量和已借出数量等信息。通过全局变量 `n` 来记录图书馆中的图书数量。程序主要包含以下几个函数: - `add_book()`:添加新书到图书馆中。 - `borrow_book()`:借阅图书。 - `return_book()`:归还图书。 - `display_books()`:显示全部图书。 - `display_borrowed_books()`:显示已借出图书。 - `display_menu()`:显示菜单,供用户选择操作。 在 `main` 函数中,通过 `do-while` 循环来不断显示菜单,并根据用户输入来执行相应的操作,直到用户选择退出系统。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值