2015-11-06 80 views
0

我正在尝试创建一个应用程序,该应用程序会在定期到指定的号码后自动拨打电话。我为此使用了Alarm Manager和Broadcast Receiver。报警管理器无法启动PHONE CALL活动,并且应用程序终止发生错误。使用闹钟管理器和广播接收器呼叫活动

这是我的代码。我是这个开发新手。

* MainActivity.java

import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

    private TextView label; 
    private EditText phoneNum; 
    private PendingIntent pendingIntent; 
    private AlarmManager manager; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     label=(TextView)findViewById(R.id.entertextlabel); 
     phoneNum=(EditText)findViewById(R.id.phonenofield); 
     Intent alarmIntent = new Intent(this, AlarmReceiver.class); 
     pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0); 
     //pendingIntent = PendingIntent.getActivity(this,1,alarmIntent,0); 

      } 

    public void startAlarm(View view) { 
     manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     int interval = 10000; 

     manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent); 
     Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show(); 
    } 


    public void cancelAlarm(View view) { 
     if (manager != null) { 
      manager.cancel(pendingIntent); 
      Toast.makeText(this, "Alarm Canceled", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

* AlarmReceiver.java

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.widget.Toast; 

/** 
* Created by Saud on 05/11/2015. 
*/ 
public class AlarmReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent arg1) { 
     // For our recurring task, we'll just display a message 
     Toast.makeText(context, "I'm running", Toast.LENGTH_SHORT).show(); 
     Intent in = new Intent(Intent.ACTION_CALL); 
     in.setData(Uri.parse("tel:03324310929")); 
     context.startActivity(in); 


    } 

} 

我收到提示 “电话需要用户权限......” 在

context.startActivity(in); 

* mainactivity.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Enter the Mobile number" 
     android:id="@+id/entertextlabel" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="79dp" />  

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Start Alarm" 
     android:id="@+id/button" 
     android:layout_alignParentBottom="true" 
     android:layout_toStartOf="@+id/callBtn" 
     android:layout_marginBottom="81dp" 
     android:onClick="startAlarm"/> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Cancel Alarm" 
     android:id="@+id/button2" 
     android:layout_alignTop="@+id/button" 
     android:layout_toEndOf="@+id/callBtn" 
     android:onClick="cancelAlarm"/> 
</RelativeLayout> 

* Mantifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.saud.nexustelecom" > 


    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 


    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme" > 
     <receiver android:name=".AlarmReceiver"></receiver> 
     <activity android:name=".MainActivity" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

回答

0

问题已解决。

我在AlarmReceiver类中使用了Flag“FLAG_ACTIVITY_NEW_TASK”和intent。

新代码如下

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.widget.Toast; 

/** 
* Created by Saud on 05/11/2015. 
*/ 
public class AlarmReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent arg1) { 
     // For our recurring task, we'll just display a message 
     Toast.makeText(context, "I'm running", Toast.LENGTH_SHORT).show(); 
     // Intent in = new Intent(Intent.ACTION_CALL); 
     //in.setData(Uri.parse("tel:03324310929")); 
     Intent in = new Intent(Intent.ACTION_CALL); 
     in.setData(Uri.parse("tel:03324310929")); 
     in.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(in); 


    } 

}