我正在制作一个应用程序,可以发送特定的短信到用户选择的所有联系人,只需点击按钮。
接收器还将在手机上安装该应用程序。当安装了该应用程序的手机收到该特定短信时,他们会收到报警对话框,并从资产文件夹播放音频。(即使手机已锁定或处于睡眠状态,或应用程序未运行[即使最近的应用程序已清除])
我已经成功地通过点击向所有choosen联系人发送短信。还可以通过阅读短信来报警。我的问题是,。。。。。只有在应用程序运行时,警报才会起作用。当手机处于锁定状态,或处于睡眠状态,甚至是在最近的应用程序中,应用程序都无法工作。我已经搜索过该功能应该使用的服务。请帮帮我。
这是我的主要活动。JAVA
public class MainActivity extends AppCompatActivity {
EditText e1, e2;
Button b1;
private final static int SEND_SMS_PERMISSION_REQ=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
e1=findViewById(R.id.editText);
e2=findViewById(R.id.editText2);
b1=findViewById(R.id.button);
b1.setEnabled(false);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.RECEIVE_SMS)
!=PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{Manifest.permission.RECEIVE_SMS},1000);
}
if(checkPermission(Manifest.permission.SEND_SMS))
{
b1.setEnabled(true);
}
else
{
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, SEND_SMS_PERMISSION_REQ);
}
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String s1=e1.getText().toString();
// String s2=e2.getText().toString();
String s2="SMSBOOM";
if(!TextUtils.isEmpty(s1)&&!TextUtils.isEmpty(s2))
{
if(checkPermission(Manifest.permission.SEND_SMS))
{
SmsManager smsManager=SmsManager.getDefault();
smsManager.sendTextMessage(s1,null,s2,null,null);
}
else {
Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
}
}
else
{
Toast.makeText(MainActivity.this, "Permission denied", Toast.LENGTH_SHORT).show();
}
}
});
}
private boolean checkPermission(String sendSms) {
int checkpermission= ContextCompat.checkSelfPermission(this,sendSms);
return checkpermission== PackageManager.PERMISSION_GRANTED;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode)
{
case SEND_SMS_PERMISSION_REQ:
if(grantResults.length>0 &&(grantResults[0]==PackageManager.PERMISSION_GRANTED))
{
b1.setEnabled(true);
}
break;
case 1000:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Permission granted!", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "Permission not granted", Toast.LENGTH_SHORT).show();
finish();
}
break;
}
}
}
这是我的听筒课
public class ReceiveSms extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
Bundle bundle = intent.getExtras();
SmsMessage[] msgs;
String msg_from;
if(bundle != null){
try{
Object [] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for(int i = 0; i< msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
msg_from = msgs[i].getOriginatingAddress();
String msgBody = msgs[i].getMessageBody();
//https://stackoverflow.com/questions/14093404/android-alarmmanager-or-service
if(msgBody.equals("SMSBOOM")){
Toast.makeText(context, "From: "+msg_from + ", Msg: "+msgBody, Toast.LENGTH_SHORT).show();
this.abortBroadcast();
Intent i1 = new Intent(context, RingActivity.class);
i1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i1.putExtra("num", msg_from);
i1.putExtra("msg", msgBody);
context.startActivity(i1);
}
}
}catch (Exception e){
e.printStackTrace();
}
}
}
}
}
这是我的活动
public class RingActivity extends Activity {
final Context context = this;
MediaPlayer mp = new MediaPlayer();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ring);
Bundle extras = getIntent().getExtras();
String num = extras.getString("num");
String msg = extras.getString("msg");
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, "I AM At Reciver\nsenderNum: "+num+", message: " + msg, duration);
toast.show();
AudioManager am =
(AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setStreamVolume(
AudioManager.STREAM_MUSIC,
am.getStreamMaxVolume(AudioManager.STREAM_MUSIC),
0);
// SmsManager smsManager = SmsManager.getDefault();
if(IsRingerSilent() || IsVibrate())
{
// smsManager.sendTextMessage(num, null, "Device turned to ringing mode.. && It's Ringing..", null, null);
AudioManager audioManager= (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE);
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
mp.setLooping(true);
try
{
AssetFileDescriptor afd;
afd = getAssets().openFd("ringtone.mp3");
mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
mp.prepare();
mp.start();
}
catch (IllegalStateException | IOException e)
{
e.printStackTrace();
}
}
else
{
// smsManager.sendTextMessage(num, null, "Device Ringing...", null, null);
AudioManager audioManager= (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE);
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
mp.setLooping(true);
try
{
AssetFileDescriptor afd;
afd = getAssets().openFd("ringtone.mp3");
mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
mp.prepare();
mp.start();
}
catch (IllegalStateException | IOException e)
{
e.printStackTrace();
}
}
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
// Setting Dialog Title
alertDialogBuilder.setTitle("New SMS Boom");
// Setting Dialog Message
alertDialogBuilder.setMessage("Sender : "+num+"\n"+"Message : "+msg);
alertDialogBuilder.setNegativeButton("Close", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which)
{
if(mp.isPlaying())
{
mp.setLooping(false);
mp.stop();
}
dialog.cancel();
finish();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
//show dialog
alertDialog.show();
}
private boolean IsVibrate()
{
AudioManager audioManager = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE);
if(audioManager.getRingerMode()==AudioManager.RINGER_MODE_VIBRATE )
{
return true;
}
else
{
return false;
}
}
private boolean IsRingerSilent()
{
AudioManager audioManager = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE);
if(audioManager.getRingerMode()==AudioManager.RINGER_MODE_SILENT )
{
return true;
}
else
{
return false;
}
}
public boolean onKeyDown(int keycode, KeyEvent ke)
{
if(keycode==KeyEvent.KEYCODE_BACK)
{
if(mp.isPlaying())
{
mp.setLooping(false);
mp.stop();
}
finish();
}
return true;
}
}
有没有这样做的想法?请帮助............
我知道了。在android 10或更高版本中,您需要在AndroidManifest中添加SYSTEM_ALERT_WINDOW权限。xml
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
根据官方留档https://developer.android.com/guide/components/activities/background-starts
null
本文向大家介绍android获取情景模式和铃声 实现震动、铃声提醒,包括了android获取情景模式和铃声 实现震动、铃声提醒的使用技巧和注意事项,需要的朋友参考一下 当我们想通过铃声或者震动提醒用户的时候(类似于手机来电提醒界面),我们需要考虑到手机本身的情景模式。(目前有个OPPO的测试手机就发现,即使调为了静音模式,我依旧可以将铃声播放出来),为了防止“灵异”事件的发生,所以在提示前将情景模
下面我们来看看睡眠和醒来的基本模型。假设有两个系统调用作为睡眠和唤醒。呼叫睡眠的过程将被阻止,而调用的过程将被唤醒。 有一个叫做生产者消费者问题的流行例子,它是模拟睡眠和唤醒机制的最流行的问题。 睡眠和觉醒的概念非常简单。如果关键部分不是空的,那么该过程将进入休眠状态。它将被临界区内正在执行的其他进程唤醒,以便进程可以进入临界区。 在生产者消费者问题中,让我们说有两个过程,一个过程写某事,而另一个
本文向大家介绍Android BroadcastReceiver接收收到短信的广播,包括了Android BroadcastReceiver接收收到短信的广播的使用技巧和注意事项,需要的朋友参考一下 一、知识介绍 1、broadcastReceiver是广播接受者,四大组件之一。 2、Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统的状态信息。 3、使用场景:
问题内容: 我正在编写Java客户端(在weblogic 10.3上)以调用安全的Web服务。我已获得安装在cacerts,DemoIdentity.jks和DemoTrust,jks中的客户端证书。在我的Weblogic中,我已将密钥库设置为DemoIdentity和DemoTrust。在weblogic控制台中,我已将“双向客户端证书行为:”设置为“已请求但未强制执行的客户端证书”。对于“启用
本文向大家介绍Android自定义View 实现闹钟唤起播放闹钟铃声功能,包括了Android自定义View 实现闹钟唤起播放闹钟铃声功能的使用技巧和注意事项,需要的朋友参考一下 先上图看一下闹钟唤期页面的效果 实现的功能: 1:转动的图片根据天气情况更换 2:转动时间可以设置,转动结束,闹铃声音就结束 3:光圈颜色渐变效果 直接上代码啦: 以上所述是小编给大家介绍的Android自定义View