如何在没有权限的android 6中使用广播接收器启动应用程序
Posted
技术标签:
【中文标题】如何在没有权限的android 6中使用广播接收器启动应用程序【英文标题】:How to Start app using Broadcast Receiver in android 6 which doesn't have permission 【发布时间】:2017-04-03 17:54:33 【问题描述】:当电话打到我的手机时如何启动我的应用程序。广播接收器将无法工作,因为我的应用程序没有更早运行并且我没有权限在 android 6.0(Marshmallow) 中检查 android.permission.READ_PHONE_STATE。
我没有任何活动课程。我只是想在来电时创建一个txt文件。
我只是想知道当应用程序尚未启动时我们如何获得广播接收器的权限。来电时广播将无法正常工作,因为我们没有权限。
这是我的代码:
Android 清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ranveer.teaser">
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<receiver
android:name=".IncommingCallReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
</application>
</manifest>
IncommingCallReceiver.java
package com.example.ranveer.teaser;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import java.io.*;
import android.widget.Toast;
public class IncommingCallReceiver extends BroadcastReceiver
public IncommingCallReceiver()
Context mContext;
@Override
public void onReceive(Context mContext, Intent intent)
try
File file = new File("Hello1.txt");
file.createNewFile();
FileWriter writer = new FileWriter(file);
// Writes the content to the file
writer.write("This\n is\n an\n example\n");
writer.flush();
writer.close();
Toast.makeText(mContext,"Done writing in file",
Toast.LENGTH_SHORT).show();
catch (Exception e)
Toast.makeText(mContext, e.getMessage(),
Toast.LENGTH_SHORT).show();
try
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if(state.equals(TelephonyManager.EXTRA_STATE_RINGING))
Toast.makeText(mContext, "Phone Is Ringing", Toast.LENGTH_LONG).show();
// Your Code
if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK))
Toast.makeText(mContext, "Call Recieved", Toast.LENGTH_LONG).show();
// Your Code
if (state.equals(TelephonyManager.EXTRA_STATE_IDLE))
Toast.makeText(mContext, "Phone Is Idle", Toast.LENGTH_LONG).show();
// Your Code
catch(Exception e)
//your custom message
【问题讨论】:
您需要一个Activity
。就是这样。
【参考方案1】:
除非您的应用是系统应用,否则您需要至少有一个Activity
,并且用户需要至少一次显式(手动)启动您的应用。否则,您的应用程序将保持“停止状态”,并且您的 BroadcastReceiver
将不会收到对 onReceive()
的任何调用。从 Android 3.0 开始就是这种情况。
【讨论】:
以上是关于如何在没有权限的android 6中使用广播接收器启动应用程序的主要内容,如果未能解决你的问题,请参考以下文章