如何解决Android 如何使用 Kotlin 授予来自小部件的调用权限
我有一个简单的应用程序,需要根据单击按钮来拨打 4 个号码,这就是应用程序。我认为这已经解决了。
package com.blockd
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import java.lang.Exception
class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
//Kapija 1 button click
fun onKapija1Click(view: View)
{
makeACall(PhoneNumbers.kapija1Number)
}
//Kapija 2 button click
fun onKapija2Click(view: View)
{
makeACall(PhoneNumbers.kapija2Number)
}
//Garaza 1 button click
fun onGaraza1Click(view: View)
{
makeACall(PhoneNumbers.garaza1Number)
}
//Garaza 2 button click
fun onGaraza2Click(view: View)
{
makeACall(PhoneNumbers.garaza2Number)
}
private fun makeACall(number: String)
{
try
{
val callIntent = Intent(Intent.ACTION_CALL)
callIntent.data = Uri.parse(number)
if (ContextCompat.checkSelfPermission(this,Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(this,arrayOf(Manifest.permission.CALL_PHONE),42)
}
startActivity(callIntent)
}
catch (ex: Exception)
{
Toast.makeText(this,"Tokom poziva doslo je do nepredvidjene greške!",Toast.LENGTH_LONG).show()
}
}
}
现在,问题是,他们想要一个具有相同功能的小部件。我不确定,这样做是否正确,但是当我需要授予呼叫权限时遇到了问题。我正在尝试这样的事情:
package com.blockd
import android.Manifest
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.view.View
import android.widget.RemoteViews
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.core.content.ContextCompat.startActivity
import java.lang.Exception
/**
* Implementation of App Widget functionality.
*/
class Widget : AppWidgetProvider()
{
private lateinit var _context: Context
override fun onUpdate(context: Context,appWidgetManager: AppWidgetManager,appWidgetIds: IntArray)
{
_context = context
// There may be multiple widgets active,so update all of them
for (appWidgetId in appWidgetIds)
{
updateAppWidget(context,appWidgetManager,appWidgetId)
}
}
override fun onEnabled(context: Context)
{
// Enter relevant functionality for when the first widget is created
}
override fun onDisabled(context: Context)
{
// Enter relevant functionality for when the last widget is disabled
}
//Kapija 1 button click
fun onKapija1Click(view: View)
{
makeACall(PhoneNumbers.kapija1Number)
}
//Kapija 2 button click
fun onKapija2Click(view: View)
{
makeACall(PhoneNumbers.kapija2Number)
}
//Garaza 1 button click
fun onGaraza1Click(view: View)
{
makeACall(PhoneNumbers.garaza1Number)
}
//Garaza 2 button click
fun onGaraza2Click(view: View)
{
makeACall(PhoneNumbers.garaza2Number)
}
private fun makeACall(number: String)
{
try
{
val callIntent = Intent(Intent.ACTION_CALL)
callIntent.data = Uri.parse(number)
if (ContextCompat.checkSelfPermission(_context,Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED)
{
//ActivityCompat.requestPermissions(_context,42)
}
startActivity(_context,callIntent,null)
}
catch (ex: Exception)
{
Toast.makeText(_context,Toast.LENGTH_LONG)
.show()
}
}
}
internal fun updateAppWidget(context: Context,appWidgetId: Int)
{
val widgetText = context.getString(R.string.appwidget_text)
// Construct the RemoteViews object
val views = RemoteViews(context.packageName,R.layout.widget)
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(appWidgetId,views)
}
我的另一个问题是小部件没有显示在主屏幕上。 如果需要,我可以提供更多代码。
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。